Das mit "OffsetRect(Rsrc, -Image1.Left, -Image1.Top); " war mein Fehler.
Habe mich beim Abschreiben um eine Zeile vertan, und aus 2 Zeilen 1 gemacht, und somit zu viele Daten im OffsetRect rein geschrieben.
Das Beispielprogramm konnte ich unter Windows nicht zum laufen bringen. Er jammert was davon, dass es Probleme mit 'Scaled' hat.
Jetzt habe ich deshalb auch keine Vorstellung, was genau das bewirkt.
Bei meinem eigentlichem Programm, wo ich alles so weit wie möglich angepasst habe, rührt sich da gar nichts.
Vermute mal, es liegt an den falschen Daten (meinen eigenen Daten) von OffsetRect. Anstatt -Imge1.Left und Top habe ich zuerst '0,0' eingetragen. Dann habe ich es mit den Daten von der Quellimage versucht, also -Quellimage.Left und -Quellimage.Top. Auch da tat sich dann nichts.
Im Buch zu Lazarus und FreePascal steht auch nichts zu dem Befehl OffsetRect, wie üblich halt. Über 90 % zu dem was ich suchte, steht nichts in den teuren Büchern.
Ich habe es inzwischen geschafft, das Quelle-Image auf ein anderes Zwischen-Image zu kopieren, und eine bestimmte Farbe Transparent zu machen. Aber wenn bei einer Wiederholung des Vorgangs nicht vorher Transparent ausschalte, um nach dem Kopieren einzuschalten, ist es nicht mehr transparent?
Dann dachte ich mir, jetzt wo das klappt, kann ich gleich von der Quelle-Image den gewünschten Teil raus kopieren, und in Ziel-Image-1 kopieren. Ja von wegen. Weil dann verschwindet das Image?
Das ergibt doch keinen Sinn? Wenn es mit Zwischen-Image klappt, müsste es doch auch mit Ziel-Image-1 auch klappen. Dass beim Zwischen-Image da Ganze Image-Quelle kopiert wurde, und beim Ziel-Image-1 nur ein Teil kopiert wird, dürfte doch da keinen Unterschied ausmachen? Es ist in meinen Fall auch ein Pixel zu Pixel kopiererei, da das andere ja nicht so recht klappen will?
Inzwischen bin ich aber einen Teil weiter gekommen, in dem ich mich wieder an die Ursprüngliche Kopierversuche erinnerte, und die neue gewonnene Erkenntnis mit dem Auslesen von Transparent etc. kombinierte:
Code: Alles auswählen
TransparenteFarbeAuslesen:=QuelleImage.Picture.PNG.Canvas.Pixels[0,0];
ZielImage.Transparent:=False;
ZielImage.Canvas.CopyRect(Rect(0,0,32,32), QuelleImage.Picture.PNG.Canvas, Rect(0,0,32,32));
ZielImage.Picture.PNG.TransparentColor:=TransparenteFarbeAuslesen;
ZielImage.Transparent:=True;
Dies scheint so dann doch endlich zu klappen.
Leider kann ich scheinbar eine ZielImage nicht erneut übermalen.
Bin also leider immer noch nicht fertig.
Und bevor da wieder Jemand deshalb Magenkrämpfe bekommt, weil ich von Picture-Canvas auf Image-Canvas kopiere, so soll man mir doch bitte einen anderen und zugleich einfachen Weg zeigen, bzw. Erklären. Weil mit OffsetRect komme ich ohne Erklärung dazu, was genau die letzten 2 Variablen bewirken (Left,Top), damit nicht klar. Und der Testlauf klappte ja (deshalb?) auch nicht. Und bitte, wenn schon andere Lösung, dann doch ohne langwieriges hin und her kopieren über (mehre) TBitmap's. Weil so was kann ja wohl auch nicht das Gelbe vom Ei sein, finde ich.
Edit: Gefunden:
Damit kann ich die Grafik löschen, und somit dann neu bemalen bzw. bekopieren.
Bleibt nur noch zu hoffen, dass es auch wirklich dann Reibungslos funzt, und nicht einer der ZielImage dann beim Härtetest verschwindet etc..