Einzelnen Beitrag anzeigen

Rollo62
Online

Registriert seit: 15. Mär 2007
4.095 Beiträge
 
Delphi 12 Athens
 
#13

AW: Multithreaded Zeichnen

  Alt 3. Jul 2018, 19:56
Hab noch ein bischen rumgespielt ...

Ich erzeuge 4 Teilbitmps in Threads, diese werden dan in einem Taeget Bitmap zusammengebaut.
Wenn Alle Threads fertig sind wird das komplette Target in das Image geschrieben, mit
Delphi-Quellcode:
procedure DoDrawBitmap(const ACanvasDst : TCanvas;
                       const ADstRc : TRectF;
                       const ASrcBmp : TBitmap);
var
  LDstRc: TRectF;
begin
    if ACanvasDst.BeginScene then
        try
            LDstRc := RectF(0, 0, ADstRc.Width, ADstRc.Width);
            LDstRc.Offset( ADstRc.TopLeft );


            ACanvasDst.DrawBitmap(ASrcBmp, // Src bmp full
                                  RectF(0,0, ASrcBmp.Width, ASrcBmp.Height), // Src rc full
                                  LDstRc, // dst part bmp to dst canvas
                                  1);

        finally
            ACanvasDst.EndScene;
        end;

end;
Wird das Teil-Bmp in das Tgt-Bmp geschrieben.

Funktioniert auf Win, OSX, And, aber noch nicht auf iOS

Sorry, der Code ist noch ein bischen wüst, durch die ganzen Tests, ich hoffe das erkennt man noch wieder
Ob es jetzt Threadmäßig optimal ist wage ich auch zu bezweifeln, mit ging es erstmal drum das
Scaling und Printing überhaupt funktioniert.
Die Performance ist bei mit jedenfalls im Bereich 60-160FPS, je nach Plattform.

Aber wie man das auf eine optimale Performance bringt, vor Allem auch auf allen Platformen, ist noch nicht klar.

Womöglich mit TScene von Eugene, der Teilbereiche bei dem Bildupdate berücksichtigt, während FMX immer das ganze Bild updated.
Vielleicht hat ja noch jemand Ideen dazu.


Rollo
Angehängte Dateien
Dateityp: zip T183_BmpThread.zip (14,3 KB, 5x aufgerufen)
  Mit Zitat antworten Zitat