![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Есть график на пэйнтбоксе. Нужно в определённый момент работы программы чем-то его "затуманить" - чтоб он был читаем, но цвета явно бледнее, чем в активном режиме. Хотелось бы, конечно, наложить сверху какую-нибудь панель полупрозрачную, но ни у каких панелей не нашла свойства прозрачности не булевского. Подскажите, пожалуйста, чем ещё можно осуществить эту фишку? Уж очень не хочется все цвета на графике вручную перебирать!!!
|
#2
|
||||
|
||||
![]() А нельзя его просто перерисовать с новыми цветами? Данные графика где-то хранятся или тупо в пэйнтбоксе все?
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#3
|
||||
|
||||
![]() Вот специально для пэйнтбокса:
Код:
procedure obsc(pb:TPaintBox;const passColor:TColor; const coeff:single); const pcprecision=10; type TRGBArray = array[0..32767] of TRGBTriple; PRGBArray = ^TRGBArray; var row:PRGBArray; bmp:TBitMap; i,j:Integer; r,g,b:Byte; begin bmp:=TBitMap.Create; bmp.PixelFormat:=pf24bit; bmp.Width:=pb.Width; bmp.Height:=pb.Height; bmp.Canvas.CopyRect(rect(0,0,bmp.Width,bmp.Height),pb.Canvas, rect(0,0,pb.Width,pb.Height)); for i:=0 to bmp.Height-1 do begin Row:=bmp.Scanline[i]; for j:=0 to bmp.Width-1 do begin if not ((abs(getRValue(passColor)-Row[j].rgbtRed)>pcprecision) and (abs(getGValue(passColor)-Row[j].rgbtGreen)>pcprecision) and (abs(getBValue(passColor)-Row[j].rgbtBlue)>pcprecision)) then begin b:=trunc(Row[j].rgbtBlue+(255-Row[j].rgbtBlue)*coeff); if b>255 then b:=255; g:=trunc(Row[j].rgbtGreen+(255-Row[j].rgbtGreen)*coeff); if g>255 then g:=255; r:=trunc(Row[j].rgbtRed+(255-Row[j].rgbtRed)*coeff); if r>255 then r:=255; Row[j].rgbtBlue:=b; Row[j].rgbtGreen:=g; Row[j].rgbtRed:=r; end; end; end; pb.Canvas.Draw(0,0,bmp); bmp.Free; end; ............. obsc(Form1.PaintBox1,clBtnFace,0.7); ![]() |
#4
|
|||
|
|||
![]() даааа... уж.... действительно, попа где-то рядом. Тем не менее, спасибо большое, что выложились! Придётся всё-таки перебирать цвета вручную
![]() |