![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Можно ли как-нибудь ускорить работу с Canvas.Pixels [] [D5, Win95/98]
JC © (2002-05-04 12:04:00)Мне надо обрабатывать Большую картинку (1024х768) переставляя в ней пиксели, но при стандартных функциях это занимает от 30 сек до 1,5 минуты, видел подобную программу под DOS, скорость мгновенная. Заранее благодарен.
MBo (2002-05-09 21:24:00) [1]procedure TForm1.Button1Click(Sender: TObject);
var b:tbitmap;
a:array[0..9,0..9] of TRGBQuad;
bi:tbitmapinfo;
i,j:integer;
s:string;
begin
b:=tbitmap.create;
b.PixelFormat:=pf24bit;
b.width:=10;
b.height:=10;
b.canvas.MoveTo(0,0);
b.canvas.LineTo(5,5);
image1.picture.assign(b);
with bi.bmiHeader do begin
biWidth:=b.Width;
biHeight:=b.Height;
biSize:=SizeOf(TBITMAPINFOHEADER);
biCompression:=BI_RGB;
biBitCount:=32;
biPlanes:=1;
biSizeImage:=0;
end;
GetDiBits(b.canvas.handle,b.handle,0,10,@a,bi,DIB_RGB_COLORS);
for i:=0 to 9 do begin
s:="";
for j:=0 to 9 do
s:=s+inttohex(a[i,j].rgbGreen,2) +" ";
memo1.lines.add(s);
end;
memo1.lines.add("");
PatBlt(b.canvas.handle,0,0,10,10,whiteness) ;
for i:=0 to 9 do
for j:=0 to 9 do begin
a[i,j].rgbRed:=0;
a[i,j].rgbGreen:=255*Ord(i<>j);
a[i,j].rgbBlue:=0;
end;
for i:=0 to 9 do begin
s:="";
for j:=0 to 9 do
s:=s+inttohex(a[i,j].rgbGreen,2) +" ";
memo1.lines.add(s);
end;
SetDiBits(b.canvas.handle,b.handle,0,10,@a,bi,DIB_RGB_COLORS);
image2.picture.assign(b);
b.free;
end;
JC (2002-05-09 16:04:00) [2]MBo можешь хоть короткий пример привести?
JC (2002-05-08 19:52:00) [3]А хоть чуть-чуть исходника, если можно.
MBo (2002-05-08 07:08:00) [4]C помощью GetDiBits получаем двумерный массив, причем с инверсией - левй угол картинки в конце массива, делаем манипуляции, потом SetDiBits
JC (2002-05-07 23:45:00) [5]Да, может что-то со мной, но по-моему GetDiBits копирует построчно, а надо попиксельно. Если я ошибаюсь, кто-нибудь приведите пример аналога
Canvas.Pixels[x+z,y]:=Canvas.Pixels[x,y]
Nikolay (2002-05-07 21:03:00) [6]scanline
JC (2002-05-07 20:43:00) [7]SPeller А можно хотя-бы одну процедуру(функцию) для поиска.
SPeller (2002-05-04 14:13:00) [8]Используй WinAPI и всё будет "летать".
MBo (2002-05-04 14:08:00) [9]при работе через Scanline скорость повысится на 1-2 порядка.
При использовани GetDiBits, если это подходит, можно еще быстрее.
Посмотри также сайт delphigfx.mastak.ru.
JC (2002-05-04 12:49:00) [10]Помоему на "C"...
Song (2002-05-04 12:44:00) [11]Эта програма была сделана на асме.