BitBlt 4x langsamer als unter Delphi

Antworten
Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

BitBlt 4x langsamer als unter Delphi

Beitrag von Christian »

Hallo,

Vielleicht hat ja jemand eine Erklärung für folgende Phänomen:

Code: Alles auswählen

bmp := TBitmap.Create;
  bmp.PixelFormat:=;
  bmp.Height := 1000;
  bmp.Width := 1000;
  bmp.Canvas.Brush.Color:=clred;
  bmp.Canvas.Rectangle(0,0,1000,1000);
  bmp1 := TBitmap.Create;
  bmp1.Height := 1000;
  bmp1.Width := 1000;
  bmp1.Canvas.Brush.Color:=clGreen;
  bmp1.Canvas.Rectangle(0,0,1000,1000);
  for i := 0 to 1000 do
    begin
      Windows.BitBlt(Form1.Canvas.Handle,0,70,1000,1000,bmp.Canvas.Handle,0,0,SRCCOPY);
      Windows.BitBlt(Form1.Canvas.Handle,0,70,1000,1000,bmp1.Canvas.Handle,0,0,SRCCOPY);
    end;


Unter Delphi ist das ganze ca 4x so schnell.
Am generierten Code liegts nicht, sondern tatsächlich am API Aufruf.
Wenn man BitBlt mit BALCKNESS und WHITENESS aufruft ists genauso schnell.
Ergo es muss am Source DC liegen. Was für Einstellungen könnten hier den Unterschied machen ?
Hat jemand schon ein Ähnliches Phänomen beobachtet ? Theo ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: BitBlt 4x langsamer als unter Delphi

Beitrag von theo »

Keine Ahnung.
Step doch mal mit dem Debugger durch.
Beim Handle holen läuft so einiges ab. (GetHandle, RequiredState etc., bzw. beim Rasterimage wieder anders)

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: BitBlt 4x langsamer als unter Delphi

Beitrag von pluto »

Was wäre wenn du die Handle außerhalb der Schleife holst(Also in Variablen abspeicherst)? Und entferne mal "Windows." dürfte aber kein unterschied machen,
MFG
Michael Springwald

klemmo
Beiträge: 7
Registriert: Mo 15. Aug 2011, 18:32

Re: BitBlt 4x langsamer als unter Delphi

Beitrag von klemmo »

es scheint am TForm Canvas zu liegen, weil wenn man das ganze auf einem TImage canvas
macht ist der Speed zwischen Delphi und Lazarus ziemlich identisch

Schöne Grüße von Holger

Antworten