Bild in das Bildfeld anpassen ??



  • Hallo leute

    ich habe ein Dialogfeld in dem ich ein Bildfeld Platziert habe .

    wenn ich in Eigenschaften mein Bitmap markiere.Erscheint das bild im Bildfeld.
    Aber wenn ich jetz das Bildfeld vergrößere bleibt das Bitmap konstant

    was muss ich machen damit sich das Bitmap in das Bildfeld anpasst das muss doch irgend wie gehen.

    Kann mir jemand da weiter helfen bitte!

    Grüße Can



  • Ich hab damit noch nicht viel gemacht (eben nur Bilder 1 zu 1 angezeigt). Ist das nicht nur ein einfaches Static das nur als so ne Art Platzhalter dient?

    Wenn du ein Bild anzeigen willst dann lade es doch in ein CBitmap und zeichne es "von Hand" auf den DC. Mit der Methode StretchBlt(...) von CDC kannst du dein Bild in allen Größen anzeigen lassen.

    Mfg, Sigi



  • Hi Sigi

    Ich bin noch Anfänger das muss du mir etwas genauer erkären damit ich es auch verstehe.

    Also ich gehe zu meine ressorcen klicke auf bild(BMP) importieren.
    und habe jetz ein bild ID_BILD1 und lege eine membervariable von typ CBitmap

    m_Bitmap.

    Muss ich es so machen
    DC.Methode StretchBlt(ID_BILD1)

    und wo bekomme ich DC her? kannst du mir da bitte ein kleines beispiel schreiben?

    Grüße Can



  • Das kommt in die OnPaint() in den vorhandene else-Block.

    CDC *pDC = GetDC();	//zeichenfläche
    
    CBitmap bitmap;		//hier wird das Bild gespeichert
    CDC tempDC;			//hier wird das Bild hineingeladen
    
    //das Bild wird geladen
    bitmap.LoadBitmap(IDB_BITMAP1); 
    //eine kombatible temporäre Zeichenoberfläche wird erstellt
    tempDC.CreateCompatibleDC(pDC); 
    //das Bild wird auf den tmporären DC gelegt
    tempDC.SelectObject(&bitmap); 
    
    int startPosX = 0;
    int startPosY = 0;
    
    int bildgroesseX = 77;
    int bildgroesseY = 66;
    
    int anzeigegroesseX = (int)(bildgroesseX*2.5f);
    int anzeigegroesseY = (int)(bildgroesseY*2.5f);
    
    pDC->StretchBlt(	startPosX,	//zeichnen: links oben X
    		startPosY,	//zeichnen: links oben Y
    		anzeigegroesseX,	//zeichnen: rechts unten X
    		anzeigegroesseY,	//zeichnen: rechts unten Y
    		&tempDC,		//DC in welchem das Bild liegt
    		startPosX,	//orig daten: links oben X
    		startPosY,	//orig daten: links oben Y
    		bildgroesseX,	//orig daten: rechts unten X
    		bildgroesseY,	//orig daten: rechts unten Y
    		SRCCOPY);		//Zeichnmodus
    

    Du kannst das ganze schneller machen wenn du die

    CBitmap bitmap;		//hier wird das Bild gespeichert
    CDC tempDC;			//hier wird das Bild hineingeladen
    

    als Membervariablen anlegst und die Methoden

    //das Bild wird geladen
    bitmap.LoadBitmap(IDB_BITMAP1); 
    //eine kombatible temporäre Zeichenoberfläche wird erstellt
    tempDC.CreateCompatibleDC(GetDC()); 
    //das Bild wird auf den tmporären DC gelegt
    tempDC.SelectObject(&bitmap);
    

    in die OnInitDialog() verlegst, denn dann wird das Bild nur einmal geladen und bleibt im Speicher.

    Wünsch dir gutes gelingen,

    Mfg, Sigi



  • Hi Sigi

    Danke für den antwort werde ich mal die nacht durch machen.

    Eigentlich möchte ich das bild als hintergrundbild für Textfelder laden.
    Kann ich das bild auch auf ein textfeld laden oder geht das anderstde oder soll ich das bild laden und die buttons auf das bild plazieren.

    wie macht mann so was richtig?

    Grüße can



  • Hallo

    Ich kann das bild jetz anzeigen und die größe änder.aber nicht verschieben
    ich muss mehrere bilder laden und unterschidlich anordnen.

    wie mache ich das! kann mir jemand helfen bitte..

    Grüße Can



  • GAnz einfach mit dem verschieben:
    Du musst nur die ersten zwei Parameter von StretchBlt ändern.
    Die geben die X und Y Koordinate deines Bildes im Fenster an.
    PS: Schau mal unter http://www.henkessoft.de/mfc_einsteigerbuch_kapitel4.htm nach.
    Dort liegt auch ein ziemlich gutes Tutorial für Visual Studio 6.0



  • Hallo XCooperation

    wenn ich die beiden werte ändere

    int startPosX = 0;
    int startPosY = 0;

    Dann komme ich nicht über die mitte des Bildschirms.

    Eigentlich müßte ich das Bild mit den beiden werte da hin setzen können wo ich es möchte.
    Aber wie gesagt wenn ich über die mitte komme wird das Bild nicht mehr angezeigt.

    was mache ich falsch ??

    Auf der web seite im kapitel4 steht auch nichts drin 😞


Anmelden zum Antworten