Bild (jpg, bmp) öffnen und anzeigen lassen ?
-
hi - komme gerade von mir drüben - habe natürich das demoprogg gezogen.
jetzt muss ich erstmal alles überflüssige rausballern um zu sehen wie ich eifnach nur das bild bekomme. mehr brauche ich ja nicht!zu dem hatte ich auch die suchfunktion genommen - und auch das gefunden aber das bezieht sich aufs speichern - ich will ja ein bild einladen!
soll auf ne paintbox kommen!
kann dir mein prog ja mal schicken was ich bisher habe
t i m
-
Klar, schicke es vorbei, baue dir das ein
-
dern00b schrieb:
jetzt muss ich erstmal alles überflüssige rausballern um zu sehen wie ich eifnach nur das bild bekomme. mehr brauche ich ja nicht!
Ich denke der zweite Link von Christian ist da sehr viel sinnvoller. Da kannst du den Quelltext fast 1:1 rausnehmen.
-
christian - du hast deine mailaddy vergessen^^

also:
#include <jpeg.hpp> #include <gifimage.hpp> TJPEGImage *jpg = new TJPEGImage(); jpg->Assign(Image1->Picture->Bitmap); jpg->SaveToFile("test.jpg"); Image2->Picture->Assign(jpg); delete jpg; TGIFImage *gif = new TGIFImage(); gif->Assign(Image1->Picture->Bitmap); gif->SaveToFile("test.gif"); Image3->Picture->Assign(gif); delete gif;das ist aber immer saveToFile!
ich muss das aber loaden.
dann müsste ich noch sagen, das das max. (ca) 250X250 px haben soll etc... verkleiner wollte ich das dann nicht
man ist das schwer.
Frage: Wie bekomme ich das dann auf meine PaintBox?
-
Hallo
Auf die Idee, das es eine Methode namens LoadFromFile() geben könnte, kommst du nicht?
bis bald
akari
-
doch doch - aber ich habe hier keinen bcb und keine hilfe - die idee hatte ich schon!
das ist alles 80m weit entfernt in meinem hause
tim
-
Steht auf meiner Homepage unter jeder Seite
Aber nun hast du es ja schon selber raus und hier ist der Rest:
Graphics::TBitmap *background; TJPEGImage *jpg=new TJPEGImage(); jpg->PixelFormat=jf8Bit; jpg->Performance=jpBestQuality; jpg->Smoothing=false; try { jpg->LoadFromFile(DEIN_DATEINAME); } catch(EFOpenError *e) { ShowMessage("Bild nicht vorhanden"); return; } background=new Graphics::TBitmap; background->Assign(jpg); delete jpg; if(background->Width>250||background->Height>250) { ShowMessage("Bild nur im Format 250 x 250"); return; } PaintBox1->Canvas->Draw(0,0,background); delete background; }
-
hallo christian -das sieht ja supi - aus -werde sofort rübergehen und testen!
aber zu dem vorherigen code habe ich eine zugriffsverletzung! und die verstehe ich nicht:__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { TJPEGImage *jpg = new TJPEGImage(); } void __fastcall TForm1::Button1Click(TObject *Sender) { jpg->Assign(Image1->Picture->Bitmap); } void __fastcall TForm1::Button2Click(TObject *Sender) { Image2->Picture->Assign(jpg); }bei button1click kommt die zugriffsverletzung: WARUM?
tim
-
Weil jpg im Konstruktor angelegt wurde und dort local ist
In der Headerdatei unter private des Formulars ein neues Feld aufnehmen:
TJPEGImage *jpg;
Dann im Konstruktor
jpg = new TJPEGImage();
Dann im Destruktor
delete jpg;
Damit kann jpg in der ganzen Klasse benutzt werden
-
richtig....
ach man das sind so dumme fehler!
danke - gehe jetzt rüber ne runde proggn.
P.S. hast ne mail!
-
Hallo
Belies dich mal zum Thema Gültigkeitsbereich von Variablen und den Unterschied von lokalen und Member-Variablen.
Da jpg in Button1Click bekannt ist, vermute ich da hast entweder eine globale oder Member-Variable diesen Namens und Typs.
Im Konstruktor erschaffst du zwar eine Instanz, aber legst die Adresse davon in einen lokalen Pointer, der den gleichnahmigen globalen/Member-Pointer überdeckt. Damit geht sowohl die Adresse als auch die Instanz verloren.Also schreib einfach
jpg = new TJPEGImage();um den richtigen Pointer zu benutzen.
Außerdem must du sicherstellen, das alles was du mittels new erstellst, auch mittels delete wieder gelöscht wird (Es gibt Außnahmen, aber nicht in diesem Fall). Benutzt dafür am besten den Destruktor des Forms./Edit : viel zu langsam
bis bald
akari
-
