Hallo zusammen,
ich habe mal generellen Klärungsbedarf:
Welche Operationen darf man unten allen Platformen mit einem Bitmap im Thread machen ?
VCL:
Unter
VCL verstehe ich das so das Kopieren, Malen über den Bitmap.Canvas im Thread generell möglich ist.
Lediglich das Übergeben an ein Control zum Anzeigen muss im UI-Thread passieren.
FMX:
Hier vermute ich mal das Bitmap.Canvas auch eines rein im Speicher angelegten Bitmaps schon mit UI zu tun hat.
Womöglich wegen des Canvas, der unter FMX in verschiedenen Ausführungen erscheint, je nach Plattform.
Ich würde gerne mal klären welche Operation grundsätzlich auf allen Platformen OK sind, und welche nicht:
Delphi-Quellcode:
---------------- UI-Komponente <-- zu ---> Speicher-Bitmap im Thread
01. Create --------# im Thread bmpThread.Create(100, 100); ---- Ok:
VCL-Ja, Fmx-?
02. Clear ---------# im Thread bmpThread.Clear(0); ------------ Ok:
VCL-Ja, Fmx-?
03. Bearbeiten ----# im Thread bmpThread.Canvas.Draw... ------- Ok:
VCL-Ja, Fmx-? -mit oder ohne Map/UnMap ?
04. Kopieren ------# im Thread bmpThread.Assign( bmpThread2); - Ok:
VCL-Ja, Fmx-?
05. Filelesen -----> im Thread bmpThread.LoadFromFile(); ------ ??
06. Fileschreiben -> im Thread bmpThread.SaveToFile(); -------- ??
07. Streamlesen ---> im Thread bmpThread.LoadFromStream(); ---- ??
08. Streamschreib. > im Thread bmpThread.SaveToStream(); ------ ??
09. Assign --------> im Thread bmpThread.Assign( bmpUI ); ----- Nicht OK, muss syncronisiert werden
10. Zurückgeben ---< im Thread bmpUI.Assign( bmpThread ); ----- Nicht OK, muss syncronisiert werden
Habe ich was vergessen, kann man was ergänzen ?
Wie verhält sich das unter Fmx, so das es optimal unter allen Platformen läuft ?
Ich würde gerne alles bis auf 09/10 im Thread ohne grosse Verrenkungen benutzen, ist das denkbar ?
Vielleicht könnte man eine TBitmapThreadSafe Klasse bauen, das dies alles möglichst kapseln würde wenn man die
im Thread benutzt ?
Wäre schön wenn sich damit jemand auskennen und mir auf die Sprünge helfen könnte.
Rollo