Delphi   发布时间:2022-04-11  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了delphi – 在FireMonkey中绘制像素的最快方法大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@R_248_10673@下代码:
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,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毫秒.如果删除BeginScene,DrawBitmap和EndScene调用,那么您的代码将在我的机器上运行3ms.

大佬总结

以上是大佬教程为你收集整理的delphi – 在FireMonkey中绘制像素的最快方法全部内容,希望文章能够帮你解决delphi – 在FireMonkey中绘制像素的最快方法所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。