[gelöst] Suche Bild-Kopierbefehl, der Bild direkt kopiert

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Erwin
Beiträge: 286
Registriert: Mi 16. Sep 2009, 14:15
OS, Lazarus, FPC: Xubuntu 22.04 / x86_64_linux-gtk 2 / L 2.2.0 / FPC 3.2.2

Re: [gelöst] Suche Bild-Kopierbefehl, der Bild direkt kopier

Beitrag von Erwin »

Ok, jetzt sieht es danach aus, als wäre es doch gelöst.
Danke.
Das Kopieren dauert nämlich nur beim ersten mal 1-2 Sekunden. Danach geht das kopieren Zeitgleich, würde ich sagen. Ärgerlich dass ich nicht eher auf die Idee gekommen bin, gleich mehrmaliges Kopieren während einer Sitzung zu probieren?

Allerdings das mit dem StretchBlt scheint nur dann zu funktionieren, wenn Quell- und Ziel-Koordinaten die gleichen sind. Ansonsten kommt irgendein Mischmasch bei mir heraus. Aber brauche dies derzeit eh nicht, und auch sonst bin ich derzeit darauf nicht angewiesen. Nutze jetzt dann eh

"Image1.Canvas.CopyRect(rect(0,0,100,100),Image2.Picture.PNG.Canvas,rect(0,0,100,100));"
Lazarus 2.2.0 / FP 3.2.4

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: [gelöst] Suche Bild-Kopierbefehl, der Bild direkt kopier

Beitrag von pluto »

Das Kopieren dauert nämlich nur beim ersten mal 1-2 Sekunden. Danach geht das kopieren Zeitgleich, würde ich sagen. Ärgerlich dass ich nicht eher auf die Idee gekommen bin, gleich mehrmaliges Kopieren während einer Sitzung zu probieren?

Wie gesagt: Beim ersten Zeichnen auf einen Canvas, musst du alle Pixel auf dem Canvas mit einer Farbe Installisieren. Mit FillRect geht es ganz gut.

Allerdings das mit dem StretchBlt scheint nur dann zu funktionieren, wenn Quell- und Ziel-Koordinaten die gleichen sind. Ansonsten kommt irgendein Mischmasch bei mir heraus. Aber brauche dies derzeit eh nicht, und auch sonst bin ich derzeit darauf nicht angewiesen. Nutze jetzt dann eh

Das geht schon, schauen wir uns mal diese Funktionsaufruf an:

Code: Alles auswählen

Image1.Canvas.CopyRect(rect(0,0,100,100),Image2.Canvas,rect(0,0,100,100));

Hier musst du nicht nur die Left und Top anpassen sondern auch Right und Bottom(meine ich).
z.b. so
statt 0,0,100,100 musst du dann eben 10,10,10+100,10+100 schreiben.
Ich hoffe du kannst folgen.
MFG
Michael Springwald

Erwin
Beiträge: 286
Registriert: Mi 16. Sep 2009, 14:15
OS, Lazarus, FPC: Xubuntu 22.04 / x86_64_linux-gtk 2 / L 2.2.0 / FPC 3.2.2

Re: [gelöst] Suche Bild-Kopierbefehl, der Bild direkt kopier

Beitrag von Erwin »

pluto hat geschrieben:
Allerdings das mit dem StretchBlt scheint nur dann zu funktionieren, wenn Quell- und Ziel-Koordinaten die gleichen sind. Ansonsten kommt irgendein Mischmasch bei mir heraus. Aber brauche dies derzeit eh nicht, und auch sonst bin ich derzeit darauf nicht angewiesen. Nutze jetzt dann eh

Das geht schon, schauen wir uns mal diese Funktionsaufruf an:

Code: Alles auswählen

Image1.Canvas.CopyRect(rect(0,0,100,100),Image2.Canvas,rect(0,0,100,100));

Hier musst du nicht nur die Left und Top anpassen sondern auch Right und Bottom(meine ich).
z.b. so
statt 0,0,100,100 musst du dann eben 10,10,10+100,10+100 schreiben.
Ich hoffe du kannst folgen.

Nein, ich kann Dir gar nicht folgen.
Ersten ist der Code falsch. Richtig ist:

Code: Alles auswählen

Image1.Canvas.CopyRect(rect(0,0,100,100),Image2.Picture.PNG.Canvas,rect(0,0,100,100));

Beim zweiten Image (Quelle) darf "Picture" und das dazu passende Bildformat (in meinen Fall 'PNG') nicht fehlen. Sonst kopiert er wieder nur das, was er am Bildschirm sieht, statt dessen Inhalt von der Image-Komponente.
Zweitens sprach ich von 'StretchBlt', der bei unterschiedlichen Quell- und Ziel-Koordinaten nicht klappt, was aber eh ein Befehl ist, denn ich zumindest vorerst eh nicht brauche.

Code: Alles auswählen

 
StretchBlt(Image1.Canvas.Handle, 0,0,100,100, Image2.Picture.PNG.Canvas.Handle, 0,0,100,100,SRCCOPY); // Das Geht.
StretchBlt(Image1.Canvas.Handle, 0,0,100,100, Image2.Picture.PNG.Canvas.Handle, 100,100,200,200,SRCCOPY); // Das nicht, bzw. die Kopie ist nur Geschmiere.
 
Lazarus 2.2.0 / FP 3.2.4

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: [gelöst] Suche Bild-Kopierbefehl, der Bild direkt kopier

Beitrag von pluto »

Code: Alles auswählen

Image1.Canvas.CopyRect(rect(0,0,100,100),Image2.Picture.PNG.Canvas,rect(0,0,100,100));

Das war auf die Methode CopyRect beschränkt und nicht auf StretchBlt.
MFG
Michael Springwald

Erwin
Beiträge: 286
Registriert: Mi 16. Sep 2009, 14:15
OS, Lazarus, FPC: Xubuntu 22.04 / x86_64_linux-gtk 2 / L 2.2.0 / FPC 3.2.2

Re: [gelöst] Suche Bild-Kopierbefehl, der Bild direkt kopier

Beitrag von Erwin »

Ja, CopyRect.
Stretch brauche ich derzeit noch nicht.
Außerdem scheint StrecgtBlt, zumindest in Verbindung (bzw. beim Kopieren von Picture) eh verbugt zu sein.
Weil wenn ich das richtig verstehe, sollte das erste Image das sein, wo rein kopiert wird. Gefolgt von x und y Koordinaten. Dann wie breit und hoch es sein soll. Dann kommt die Quelle (wo man das Bild bezieht). Und auch dort das gleiche: x und y, so wie die Breite und Höhe des Ausschnitts. Bei mir macht er aber teils, was er will. Anpassen? Von wegen. Es kopiert meist nur. Oder packt das Ganze Bild dann in das kleine Image verkleinert rein. Und auch sonst stimmt vieles nicht. Und wenn die x,y Zahlen viel größer als die Breite und Höhe ist, jammert er was von Fehlender Datei oder irgendwas in der Richtung.
Lazarus 2.2.0 / FP 3.2.4

Erwin
Beiträge: 286
Registriert: Mi 16. Sep 2009, 14:15
OS, Lazarus, FPC: Xubuntu 22.04 / x86_64_linux-gtk 2 / L 2.2.0 / FPC 3.2.2

Re: [gelöst] Suche Bild-Kopierbefehl, der Bild direkt kopier

Beitrag von Erwin »

Glaube ich weiß jetzt, was los ist: StretchBlt kann vermutlich Picture-Formate nur kopieren, aber dessen Größe nicht verändern.
Somit hat sich der Befehl erledigt.
Lazarus 2.2.0 / FP 3.2.4

Antworten