Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Скорость графики в Delphi


Автор: mniip 9.8.2011, 13:49
Например следующий код может исполниться за доли секунды:
Код

SomeCanvas.Pen.Mode:=pmNot;
SomeCanvas.Rectangle(0,0,500,500)


почему же когда я делаю вот так:
Код

var i,j:integer;
{...}
for i:=0 to 500 do
 for j:=0 to 500 do
  SomeCanvas.Pixels[i,j]:=not SomeCanvas.Pixels[i,j]

получается в сотни тысяч раз медленнее?

Я еще могу понять если бы он работал в 10 раз медленнее но в 100000 раз!.....

Че делать для ускорения производительности?

Автор: RomanEEP 9.8.2011, 14:46
использовать Canvas.ScanLine, гуглите. Вопросу уж 100 лет в обед

Автор: Чучмек 9.8.2011, 14:51
Цитата(mniip @  9.8.2011,  13:49 Найти цитируемый пост)
почему же когда я делаю вот так:
получается в сотни тысяч раз медленнее?

А потому же, почему чтение файла посимвольно в тысячи раз медленнее чем по несколько кБ.
Решение аналогичное.
Код

procedure TForm1.Button1Click(Sender: TObject);
var p:pointer;
i:integer;
bm:tbitmap;
line:integer;
begin
bm:=tbitmap.Create;
bm.Monochrome:=false;
bm.PixelFormat:=pf24bit;
bm.Width:=form1.Width;
bm.Height:=form1.Height;
line:=trunc(bm.Height/2);
p:=bm.ScanLine[line];
for i:=25 to form1.Width-25 do
 begin
 pinteger(cardinal(p)+i*3)^:=rgb(130,255,150); //2 для pf16bit,3 для pf24bit, 4 для pf32bit
 end;

form1.Canvas.Draw(0,0,bm);

end;

Дальше сам разберешся

Автор: RomanEEP 9.8.2011, 15:01
Цитата(Чучмек @  9.8.2011,  14:51 Найти цитируемый пост)
А потому же, почему чтение файла посимвольно в тысячи раз медленнее чем по несколько кБ.

не поэтому. Это свзяано, так скажем, с особенностью реализация обращения к Pixels в WinAPI

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)