timage.picture in anderes timage.picture kopieren

Rund um die LCL und andere Komponenten
Antworten
Leberecht
Beiträge: 73
Registriert: Fr 28. Mai 2010, 08:39
OS, Lazarus, FPC: Win7 64bit, Lazarus 1.6.0 32bit (FPC 3.0.0)
CPU-Target: 32Bit
Wohnort: Heidelberg

timage.picture in anderes timage.picture kopieren

Beitrag von Leberecht »

irgentwie will das nicht klappen. ich habe eine timage-komponente auf einem formular und zeige über image.picture.loadfromfile ... verschiedene bilder an.
soweit so gut. in einigen sonderfällen aber, möchte ich das angezeigte bild nicht aus einer datei, sondern von einer anderen timage.komponente nehmen,
welche defaultmässig immer dasselbe bild geladen hat(performace-gründe), aber andere dimensionen aufweist. dabei soll er das bild aus der 2. image.komponente so behandeln, wie ein frisch von platte geladenes bild(sprich skalieren+zentrieren). ich kriege es aber nicht hin, das er das bild des 2. timage ins erste image kopiert. mit assign hab ich es probiert,
aber keine der kombinationen ging bei mir (picture.assign, picture.bitmap.assign ...)

Code: Alles auswählen

image1.picture.assign(image2.picture);
es gab zwar keine fehler, es ist aber trotzdem kein bild zu sehen. wie kann ich das bild des 2. image in das erste kopieren?
Zuletzt geändert von Lori am Do 26. Jan 2012, 18:36, insgesamt 1-mal geändert.
Grund: Highlighter

Linkat
Lazarusforum e. V.
Beiträge: 561
Registriert: So 10. Sep 2006, 23:24
OS, Lazarus, FPC: Linux Mint 22.1; Lazarus 4.0 FPC 3.2.2; RaspiOS
CPU-Target: AMD 64, ARM 64
Wohnort: nr Stuttgart

Re: timage.picture in anderes timage.picture kopieren

Beitrag von Linkat »

Hallo Leberecht,
meinst du vielleicht so etwas?

Code: Alles auswählen

Image2.Picture:=Image1.Picture;

Gruß, Linkat
Linux Mint 21.3; Lazarus 3.4 FPC 3.2.2; RaspiOS

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: timage.picture in anderes timage.picture kopieren

Beitrag von Socke »

Leberecht hat geschrieben:>image1.picture.assign(image2.picture);

es gab zwar keine fehler, es ist aber trotzdem kein bild zu sehen. wie kann ich das bild des 2. image in das erste kopieren?

Code: Alles auswählen

Image2.Picture.Assign(Image1.Picture);
Ich habe es gerade mit einem PNG-Bild aus wikimedia-Commons ausprobiert, bei mir gibt es keine Problem. Kannst du feststellen, ob sich irgendetwas an image1 getan hast (zum Beispiel: vor dem Kopieren alles schwarz machen)?

Andernfalls versuche es mit einem Update -- ich habe hier Lazarus 0.9.31 r34763 mit FPC 2.6.0
Linkat hat geschrieben:

Code: Alles auswählen

Image2.Picture:=Image1.Picture;
Das ist mit dem oben gezeigten Ansatz praktisch identisch:

Code: Alles auswählen

procedure TCustomImage.SetPicture(const AValue: TPicture);
begin
  if FPicture=AValue then exit;
  //the OnChange of the picture gets called and
  // notifies this TCustomImage that something changed.
  FPicture.Assign(AValue);
end;
Ein ganz anderer Ansatz wäre, dass du das Bild zuerst zwischenspeicherst. Q&D sieht das so aus:

Code: Alles auswählen

var s:TMemoryStream;
begin
s := TMemoryStream.Create();
Image1.picture.savetostream(s);
s.Position = 0;
image2.picture.loadfromstream(s);
s.free;
end;
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Leberecht
Beiträge: 73
Registriert: Fr 28. Mai 2010, 08:39
OS, Lazarus, FPC: Win7 64bit, Lazarus 1.6.0 32bit (FPC 3.0.0)
CPU-Target: 32Bit
Wohnort: Heidelberg

Re: timage.picture in anderes timage.picture kopieren

Beitrag von Leberecht »

oh mann, tut mir leid. ich hatte einen selten dummen fehler gemacht, natürlich geht es mit picture.assign.
mein fehler: in meinem formular mit dem imagelist-array fangen die indexe mit 1 an (1..10).
im hauptformular dagegen versuche ich ständig image1.picture.assign(form2.liste[0].picture). element 0 gibts nicht. tja, so kanns gehen. :oops:
„Viel zu lernen du noch hast.“
(Yoda zu Dooku)

Antworten