Форум: "Media";
Текущий архив: 2006.12.17;
Скачать: [xml.tar.bz2];
ВнизСкорость работы с Bitmap Найти похожие ветки
← →
Mirror © (2006-05-02 15:20) [0]Мне необходимо делать некоторые преобразования картинок. Для начала я просто попробовал сделать обычное цветоразностное преобразование (из RGB в YCrCb). Для этого я беру каждую точку Bitmap (просто цикл по всем X и Y) и по известной формуле Y=0.299R+0.586G+0.114B высчитываю соответствующую компоненту. Проблема в том, что всё это происходит очень долго. Что я не так делаю?
Вот кусок кода с самим преобразованием (Реально формат остаётся RGB потому что мне необходимо чисто визуально показать цветоразностные компоненты):
Var
Y,X,TR,TG,TB,TY,TCr,Tcb,P: Integer;
begin
Form1.ProgressBarYCrCb.Position:=0;
P:=Trunc(Form1.ImageEnViewR.Bitmap.Height/100);
Form1.ImageEnViewY.Bitmap.Height:=Form1.ImageEnViewR.Bitmap.Height;
Form1.ImageEnViewY.Bitmap.Width:=Form1.ImageEnViewR.Bitmap.Width;
Form1.ImageEnViewCr.Bitmap.Height:=Form1.ImageEnViewR.Bitmap.Height;
Form1.ImageEnViewCr.Bitmap.Width:=Form1.ImageEnViewR.Bitmap.Width;
Form1.ImageEnViewCb.Bitmap.Height:=Form1.ImageEnViewR.Bitmap.Height;
Form1.ImageEnViewCb.Bitmap.Width:=Form1.ImageEnViewR.Bitmap.Width;
For Y:=0 to Form1.ImageEnViewR.Bitmap.Height - 1 do
Begin
For X:=0 to Form1.ImageEnViewR.Bitmap.Width - 1 do
Begin
TR:=Form1.ImageEnViewR.Bitmap.Canvas.Pixels[X,Y];
TR:=TR and $FF;
TG:=Form1.ImageEnViewG.Bitmap.Canvas.Pixels[X,Y];
TG:=TG and $FF;
TB:=Form1.ImageEnViewB.Bitmap.Canvas.Pixels[X,Y];
TB:=TB and $FF;
TY:=Trunc(0.299*TR+0.586*TB+0.114*TG);
TCr:=ABS(Trunc(-0.169*TR-0.331*TB+0.5*TG));
TCb:=ABS(Trunc(0.5*TR-0.419*TB-0.081*TG));
TY:=TY or (TY shl 8) or (TY shl 16);
TCr:=TCr or (TCr shl 8) or (TCr shl 16);
TCb:=TCb or (TCb shl 8) or (TCb shl 16);
Form1.ImageEnViewY.Bitmap.Canvas.Pixels[X,Y]:=TY;
Form1.ImageEnViewCr.Bitmap.Canvas.Pixels[X,Y]:=TCr;
Form1.ImageEnViewCb.Bitmap.Canvas.Pixels[X,Y]:=TCb;
End;
Form1.ProgressBarYCrCb.Position:=Trunc(Y/P);
End;
Form1.ImageEnViewY.Fit;
Form1.ImageEnViewCr.Fit;
Form1.ImageEnViewCb.Fit;
Form1.ProgressBarYCrCb.Position:=100;
Извините, за немного некрасивый код (написан минут за пять-десять) Мне важно больше не то что он считает, а то с какой скоростью он это делает.
← →
Poirot © (2006-05-02 15:27) [1]ScanLine вместо Pixels? Думаю будет побыстрее!
← →
Jeer © (2006-05-02 17:58) [2]FastLib ?
← →
capkoh © (2006-05-02 20:29) [3]Я люблю использовать DIB, а конкретно - CreateDIBSection. Всё работает очень быстро.
← →
programania © (2006-05-02 21:37) [4]>Мне необходимо делать некоторые преобразования картинок
Вот процедуры преобразования картинок в bitmap со scanLine:
Rotate, Resize, Emboss, Plasma, MandelBrot,
GaussianBlur, Smooth, Contrast, Lightness, Saturation, AntiAlias, FishEye, Strecth, Tile и т.п.
http://programania.ru/janfx.zip 19кб
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2006.12.17;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.048 c