TImage (richtig)leeren
-
Hallo!
Ich möchte verschiedene Bilder mit einem Image anzeigen. Leider bleiben die Bilder im Hintergrund liegen und es kommt zu überlagerungen (nicht genormte Größe). Stretch kommt nicht in Frage... Image1->Picture = NULL bzw. Visible = false bringen nichts.Wer weiß einen Rat?
Gruß
arne
-
Alles mit Canvas übermalen? (Komisch, dass Image1->Picture=NULL nichts bringt...)
-
hat mich auch gewundert...
wie funzt das mit Canvas genau?Gruß
arne
-
Canvas geht leider auch nicht, da ich mit JPEG arbeite...
Ich könnte höchstens ein JPEG in die Exe einbauen, weiß aber nicht genau wie das gehen soll...DiV
arne
-
Hm ich gebe da HEZ Recht,
Image1->Picture = NULL;
funzt bei mir vorzüglich!!!
Anschliessend ein erquickendesImage1->Picture->LoadFromFile(Pfad\\Dateiname);
und das Herz lacht!!!
Noch 7x schlafen!!!
-
Und wieder einmal:
http://www.c-plusplus.net/forum/viewtopic.php?t=39241Schon Cäsar sagte: Wer suchet, der findet! Oder war's Cicero? Auf jedenfall ist's laaaaaaange her...[asm]
-
Hi,
oder vielleicht mit dem kleinen Holzhammer:
Image1->Picture->Bitmap->Height = 0;
-
Ich will euch ja nicht kränken, aber Image1->Picture=NULL bzw. Image1->Visible =false od. Image1->Picture->Assign(NULL) löschen alle nicht den Inhalt des Image.
Habe jetzt einfal Image1->Align = alNone; und schon wird das überflüssige nicht mehr angezeigt.
Gruß
arne
-
arne schrieb:
Ich will euch ja nicht kränken, aber Image1->Picture=NULL [...] löschen alle nicht den Inhalt des Image
Funktioniert hier zuverlässig.
Ich will dich ja nicht kränken, aber bist du sicher, dass du das richtig bzw. auf das richtige Image anwendest?Ggf. kannst du ja mal ein minimales Beispielprojekt bereitstellen, das die von dir beschriebenen Probleme zeigt.
-
Probiert mal das hier:
void __fastcall TForm1::Button1Click(TObject *Sender) { Image1->Picture= NULL; Image1->AutoSize = true; Image1->Align=alClient; Image1->Visible = false; TJPEGImage *JPEGImage = new TJPEGImage; JPEGImage->LoadFromFile("breit.jpg"); Form1->Image1->Picture->Assign(JPEGImage); Image1->Height = Panel1->Height; Image1->Width = Panel1->Width; Image1->Visible = true; delete JPEGImage; } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { Image1->Parent = Panel1; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { Image1->Picture= NULL; Image1->AutoSize = true; Image1->Align=alClient; Image1->Visible = false; TJPEGImage *JPEGImage = new TJPEGImage; JPEGImage->LoadFromFile("Lang.jpg"); Form1->Image1->Picture->Assign(JPEGImage); Image1->Height = Panel1->Height; Image1->Width = Panel1->Width; Image1->Visible = true; delete JPEGImage; }
Bei mir bcb5 gibt es überlagerungen, d.h. wird der Inhalt nicht gelöscht.:p
MfG
arne
-
Also bei mir funktioniert das einwandfrei BCB6.
Aber mal abgesehen davon was spricht bei deinem Code gegen
Image1->Picture->LoadFromFile("Name.jpg");
anstelle von:
TJPEGImage *JPEGImage = new TJPEGImage; JPEGImage->LoadFromFile("breit.jpg"); Form1->Image1->Picture->Assign(JPEGImage); ... delete JPEGImage;
-
Es ging darum das sich die Bilder überlagern! Weil das zuerst geladene Bild nicht gelöscht wird. Natürlich müssen sich die Bilder in der Abmessung unter scheiden (breit/lang) damit der Effekt sichtbar wird. Image1->Picture = NULL; ist dasselbe wie Image1->Visible = false; ->ursprüngliche Bild wird nicht gelöscht und ist an den überstehenden Enden noch sichtbar. Allerdings nur bei Bilderm mit extrem unterschiedlichen abmessungen und bei den genannten Einstellungen.Wer es nicht glauben will, dem kann ich ja mal einen Screenshot zumailen!
Gruß
arne
-
Was verstehst du unter "extrem unterschiedlichen Abmessungen"? Ich habe deinen Beispielcode mit einem Bild von 50x200 Pixeln und einem mit 300x75 Pixeln getestet und da gibt es keinerlei überstehende Ränder.
Und auch die bereinigte Variante funktioniert problemlos://--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Image1->Parent = Panel1; Image1->AutoSize = true; Image1->Align = alClient; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { Image1->Picture = NULL; Image1->Picture->LoadFromFile("c:\\breit.jpg"); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { Image1->Picture = NULL; Image1->Picture->LoadFromFile("c:\\lang.jpg"); } //---------------------------------------------------------------------------
arne schrieb:
Wer es nicht glauben will, dem kann ich ja mal einen Screenshot zumailen!
Wie schon gesagt: stell ein entsprechendes Minimalprojekt (inklusive kompilierter Exe) bereit.