delphi – 在FireMonkey中绘制像素的最快方法
发布时间:2020-12-15 04:20:23 所属栏目:大数据 来源:网络整理
导读:我做了以下代码: 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.Creat
我做了以下代码:
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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |