gpt4 book ai didi

delphi - 在 FireMonkey 中绘制像素的最快方法

转载 作者:行者123 更新时间:2023-12-03 14:54:18 29 4
gpt4 key购买 nike

我编写了以下代码:

procedure TForm15.Button1Click(Sender: TObject);
var
Bitmap1: TBitmap;
im: TImageControl;
Color: TColor;
Scanline: PAlphaColorArray;
x,y,i: Integer;
begin
for i:= 1 to 100 do begin
im:= ImageControl1;
Bitmap1:= TBitmap.Create(100,100);
try
for y:= 0 to 99 do begin
ScanLine:= Bitmap1.ScanLine[y];
for x:= 0 to 99 do begin
ScanLine[x]:= Random(MaxInt);
end;
end;
ImageControl1.Canvas.BeginScene;
ImageControl1.Canvas.DrawBitmap(Bitmap1, RectF(0,0,Bitmap1.Width, Bitmap1.Height)
,im.ParentedRect,1,true);
ImageControl1.Canvas.EndScene;
finally
Bitmap1.Free;
end;
end;
end;

在 Firemonkey 中是否有更快的绘制像素的方法?
我的目标是使用康威的生命游戏制作一个演示程序。

最佳答案

所有时间都花在执行这两行代码上:

ImageControl1.Canvas.BeginScene;
ImageControl1.Canvas.EndScene;

您可以删除所有使用位图的代码和实际绘制位图的代码,这对运行时没有丝毫影响。换句话说,瓶颈是场景代码而不是位图代码。我认为你没有办法优化它。

我的测试代码如下所示:

Stopwatch := TStopwatch.StartNew;
for i:= 1 to 100 do begin
ImageControl1.Canvas.BeginScene;
ImageControl1.Canvas.EndScene;
end;
ShowMessage(IntToStr(Stopwatch.ElapsedMilliseconds));

这与您的代码具有相同的运行时间,在我的机器上为 1600 毫秒。如果删除 BeginSceneDrawBitmapEndScene 调用,那么您的代码在我的计算机上运行时间为 3 毫秒。

关于delphi - 在 FireMonkey 中绘制像素的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8988131/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com