Форум: "Основная";
Текущий архив: 2006.03.05;
Скачать: [xml.tar.bz2];
ВнизПлавный GrayScale... Найти похожие ветки
← →
вурдалак (2006-01-28 07:11) [0]Подскажите как реализовать эффект подобный WinXP при нажатии Пуск -> Выполнить снимается screenshot раб. стола и он начинаем медленно тускнеть на заднем фоне пока не становится оттенками серого.
Мне данный эффект надо просто применить к bitmap"у. Именно плавное потускнение.
← →
вурдалак (2006-01-28 17:17) [1]нашел алгоритм преобразования цветного изображения в grayscale, но как это сделать плавно? а-ля M$
← →
antonn © (2006-01-28 20:19) [2]глянь тут:
http://kladovka.net.ru/index.cgi?pid=list&rid=252
там есть процедурка процентного "черно-беливания":)
← →
вурдалак (2006-01-29 10:26) [3]пасибо!
← →
вурдалак (2006-02-01 18:40) [4]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;
← →
antonn © (2006-02-02 13:48) [5]ну да, так примерно и надо, только доработать малость...
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;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.03.05;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.01 c