bitmap wird kopfüber angezeigt



  • Hey,

    SDI-Anwendung ( CView ):
    Wie kann ich ein Bitmap in der OnDraw-Funktion um z.B. 180 Grad drehen?

    Habe das Problem, daß meine Bitmaps immer auf den Kopf gestellt, angezeigt werden. Das heißt, ich muss diese vorher schon mit einem Grafikprogramm auf den Kopf stellen, damit sie in der Anwendung richtig angezeigt werden.

    Code in OnDraw():

    pDC->SetMapMode(MM_LOENGLISH);
    
                    CBitmap bitmap;
    		bitmap.LoadBitmap(IDB_BITMAP11);
    		BITMAP bm;
    		bitmap.GetObject(sizeof(bm),&bm);
    		CDC speicherDC;
    		speicherDC.CreateCompatibleDC(pDC);
    		speicherDC.SelectObject(&bitmap);
    		pDC->BitBlt(
    			480,-322, bm.bmWidth,bm.bmHeight,&speicherDC,0,0, SRCCOPY);
    


  • Ist die negative Y-Koordinate Absicht?



  • ja, die negative Y-Koordinate ist Absicht. Sonst erscheint das Bild überhaupt nicht.



  • wenn das nicht wirklich wichtig ist, dann ändere SetMapMode(MM_LOENGLISH) in MM_TEXT und dann stimmt deine Ausgabe auch, oder eben du hällst dich an den Ausgabemodus von MM_LOENGLISH der Y von unten nach oben ausgibt. Weitere Infos findeste dann im Netz.



  • Jetzt funktioniert es.
    Habe "SetMapMode" in MM_TEXT geändert u. die Koordinaten angepasst.

    Danke vielmals.



  • Zu früh gefreut!!!

    Wenn ich jetzt das Fenster drucke, steht das Bild auf der Druckausgabe wieder auf den Kopf. Also im Programm wird es richtig angezeigt u. beim Ausdruck steht es wieder kopf.
    Mit "LOENGLISH" stimmt der Ausdruck, aber dann eben wieder nicht die Ansicht im Programmfenster.



  • Hast du mal Versucht den MapMode deiner SpiecherDC auch auf MM_LOENGLISH zu stellen?



  • Erstmal Danke, für die Antworten (weis wirklich nicht mehr weiter).
    Habe es versucht, aber das bringt auch nichts.

    Die Anzeige im Programmfenster wird in "OnDraw()" abgearbeitet (ist klar).

    Meine Druckausgabe erfolgt durch "OnPrint()". Darin steht eigentlich der gleiche Code wie in "OnDraw()", nur etwas anders formatiert (z.B.Grösse der Schriften). Aber in "OnPrint()" bekomme ich nur einen Ausdruck mit dem Bild, wenn ich
    "MM_LOENGLISH" eingestellt habe. Ansonsten wird das Bild nicht mit ausgedruckt.
    Mit z.B. "MM_TEXT" oder anderen stimmen die Maße überhaupt nicht mehr ( Bild ist nur noch einige Millimeter Gross )

    Deshalb glaube ich, mir bleibt nichts anderes übrig als das Bild zu drehen, spiegeln oder so. Habe auch schon dazu gesucht, aber ich finde keine richtige Anleitung dazu.

    Code in OnPrint():

    pDC->SetMapMode(MM_LOENGLISH);
    
        CString szFilename="C:\\Programme\\HR-Software\\SägewerkPD\\Data\\Logo.bmp";
        BITMAP bild_header; 
        CBitmap pic; 
        CDC imageDC; 
    	HBITMAP hBmp = (HBITMAP)::LoadImage(NULL,szFilename, IMAGE_BITMAP, 0, 0, 
        LR_LOADFROMFILE|LR_CREATEDIBSECTION); 
        pic.Attach(hBmp); 
        pic.GetBitmap(&bild_header); 
        imageDC.CreateCompatibleDC(pDC); 
        imageDC.SelectObject( &pic); 
        pDC->BitBlt(150, 150, bild_header.bmWidth, bild_header.bmHeight, &imageDC, 0, 
        0, SRCCOPY); 
        imageDC.DeleteDC();
    


  • neuerProg schrieb:

    Die Anzeige im Programmfenster wird in "OnDraw()" abgearbeitet (ist klar).

    Meine Druckausgabe erfolgt durch "OnPrint()". Darin steht eigentlich der gleiche Code wie in "OnDraw()", nur etwas anders formatiert (z.B.Grösse der Schriften).

    und wo is dann das Problem in der OnDraw MM_TEXT zu benutzen und in der OnPrint MM_LOENGLISH?



  • Das Problem ist, das der Benutzer das Bild das er haben möchte, in einen Ordner des Programms kopiert.(Das Bild ist das Firmenlogo auf einer Rechnung)

    Das Bild wird dann von der Anwendung geöffnet u. jetzt ist halt das Problem das ich eigentlich 2 Bilder vom Benutzer bräuchte. Eines "Normal" dargestellt für "OnDraw()" u. eins um 180 Grad dedreht für "OnPrint()".

    Ich will aber dem Benutzer nicht zumuten, das er sein Logo immer um 180 Grad drehen muss. Wenn sein Logo auch noch "Schrift" enthält, müsste er es sogar spiegeln, damit es richtig angezeigt wird.
    Der Benutzer sollte sein Logo halt einfach so wie es ist in den Ordner kopieren können.



  • kannst mir ja ne nachricht schreiben, dann geb ich dir ne klasse die das kann, hier Posten würde den Rahmen sprengen


Anmelden zum Antworten