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

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut

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

Beitragvon Erwin » 18. Jun 2018, 19:15 Re: [gelöst] Suche Bild-Kopierbefehl, der Bild direkt kopier

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));"
Win 7 / Lazarus 1.6 / FP 3.0.0 / x86_64-win64-win32/win64
Erwin
 
Beiträge: 216
Registriert: 16. Sep 2009, 13:15
OS, Lazarus, FPC: Xubuntu 16.04 / x86_64_linux-gtk 2 / L 1.6+dfsg-1 / FPC 3.0.0 | 
Nach oben

Beitragvon pluto » 18. Jun 2018, 19:19 Re: [gelöst] Suche Bild-Kopierbefehl, der Bild direkt kopier

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
Aktuelles Projekt: PlutoArduino
pluto
 
Beiträge: 6708
Registriert: 19. Nov 2006, 12:06
Wohnort: Oldenburg/Oldenburg
OS, Lazarus, FPC: Linux Mint 18.3 | 
CPU-Target: AMD
Nach oben

Beitragvon Erwin » 18. Jun 2018, 19:37 Re: [gelöst] Suche Bild-Kopierbefehl, der Bild direkt kopier

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.
 
Win 7 / Lazarus 1.6 / FP 3.0.0 / x86_64-win64-win32/win64
Erwin
 
Beiträge: 216
Registriert: 16. Sep 2009, 13:15
OS, Lazarus, FPC: Xubuntu 16.04 / x86_64_linux-gtk 2 / L 1.6+dfsg-1 / FPC 3.0.0 | 
Nach oben

Beitragvon pluto » 18. Jun 2018, 19:49 Re: [gelöst] Suche Bild-Kopierbefehl, der Bild direkt kopier

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
Aktuelles Projekt: PlutoArduino
pluto
 
Beiträge: 6708
Registriert: 19. Nov 2006, 12:06
Wohnort: Oldenburg/Oldenburg
OS, Lazarus, FPC: Linux Mint 18.3 | 
CPU-Target: AMD
Nach oben

Beitragvon Erwin » 18. Jun 2018, 20:03 Re: [gelöst] Suche Bild-Kopierbefehl, der Bild direkt kopier

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.
Win 7 / Lazarus 1.6 / FP 3.0.0 / x86_64-win64-win32/win64
Erwin
 
Beiträge: 216
Registriert: 16. Sep 2009, 13:15
OS, Lazarus, FPC: Xubuntu 16.04 / x86_64_linux-gtk 2 / L 1.6+dfsg-1 / FPC 3.0.0 | 
Nach oben

Beitragvon Erwin » 18. Jun 2018, 20:17 Re: [gelöst] Suche Bild-Kopierbefehl, der Bild direkt kopier

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.
Win 7 / Lazarus 1.6 / FP 3.0.0 / x86_64-win64-win32/win64
Erwin
 
Beiträge: 216
Registriert: 16. Sep 2009, 13:15
OS, Lazarus, FPC: Xubuntu 16.04 / x86_64_linux-gtk 2 / L 1.6+dfsg-1 / FPC 3.0.0 | 
Nach oben

• Themenende •
Vorherige

Zurück zu Freepascal



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 7 Gäste

porpoises-institution
accuracy-worried