Bild (jpg, bmp) öffnen und anzeigen lassen ?



  • 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

    cecke@marquardtnet.info

    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



  • 🙂


Anmelden zum Antworten