Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Плавный GrayScale... [D7, WinXP]


вурдалак ©   (2006-01-28 07:11:00) 

Подскажите как реализовать эффект подобный WinXP при нажатии Пуск -> Выполнить снимается screenshot раб. стола и он начинаем медленно тускнеть на заднем фоне пока не становится оттенками серого.

Мне данный эффект надо просто применить к bitmap'у. Именно плавное потускнение.


antonn   (2006-02-02 13:48:00) [1]

ну да, так примерно и надо, только доработать малость...
procedure DrawIt(Canvas: TCanvas);
var BufferBMP: TBitmap;
begin
BufferBMP:=TBitmap.Create;
try
BufferBMP.Canvas.CopyRect(Rect(0,0,FControl.Width,FControl.Height),
 Canvas, Rect(0,0,FControl.Width,FControl.Height));
PrepareBitmapBright(BufferBMP,30);
Canvas.CopyRect(Rect(0,0,FControl.Width,FControl.Height),
 BufferBMP.Canvas, Rect(0,0,FControl.Width,FControl.Height));
finally
BufferBMP.free;
end;
end;


и в моей PrepareBitmapBright в строках типа
if _b>255 then _b:=255; if _b<0 then _b:=0;
сделать
if _b>255 then _b:=255 else if _b<0 then _b:=0;


вурдалак   (2006-02-01 18:40:00) [2]

antonn - отличное решение, но не могли бы вы мне подсказать. как мне быстро обработать изображение имея только канву? меня интересуют теже эффекты (grayscale / brigth) но применимо к канве. ед. способо который с ходу увидел:

procedure PrepareBitmapBright(_B_out:Tbitmap; _level:real);
var
x, y: Integer;
RowOut: PRGBArray;
_r,_b,_g:integer;
begin
//_B_out.PixelFormat:=pf24bit;
for y:=0 to _B_out.Height-1 do
begin
 RowOut:= _B_out.ScanLine[y];
 for x:=0 to _B_out.Width-1 do
 begin
  _r:=trunc(RowOut[x].rgbtRed+(RowOut[x].rgbtRed/100)*_level);
  if _r>255 then _r:=255; if _r<0 then _r:=0;
  _g:=trunc(RowOut[x].rgbtGreen+(RowOut[x].rgbtGreen/100)*_level);
  if _g>255 then _g:=255; if _g<0 then _g:=0;
  _b:=trunc(RowOut[x].rgbtBlue+(RowOut[x].rgbtBlue/100)*_level);
  if _b>255 then _b:=255; if _b<0 then _b:=0;
   RowOut[x].rgbtRed:=_r;
   RowOut[x].rgbtGreen:=_g;
   RowOut[x].rgbtBlue:=_b;
  end;
end
end;

procedure DrawIt(Canvas: TCanvas);
var
BufferBMP: TBitmap;
begin
BufferBMP:=TBitmap.Create;
BufferBMP.Canvas.CopyRect(Rect(0,0,FControl.Width,FControl.Height),
  Canvas, Rect(0,0,FControl.Width,FControl.Height));
PrepareBitmapBright(BufferBMP,30);
Canvas.CopyRect(Rect(0,0,FControl.Width,FControl.Height),
  BufferBMP.Canvas, Rect(0,0,FControl.Width,FControl.Height));
end;


вурдалак   (2006-01-29 10:26:00) [3]

пасибо!


antonn   (2006-01-28 20:19:00) [4]

глянь тут:
http://kladovka.net.ru/index.cgi?pid=list&rid=252
там есть процедурка процентного "черно-беливания":)


вурдалак   (2006-01-28 17:17:00) [5]

нашел алгоритм преобразования цветного изображения в grayscale, но как это сделать плавно? а-ля M$


Наверх

Титульная страница Поиск, карта сайта Написать письмо