HBitmap zu Struct Bitmap



  • Hallo
    Ist es möglich eine Bitmap Structur zu füllen, mit Hilfe eines Handles von einem Bitmap.
    Wenn das nicht möglich sein sollte, ist es dann möglich über diesen Handle die Breite und Höhe des Bitmaps zu bestimmen?

    MfG
    Compufreak



  • Compufreak[C++] schrieb:

    ...ist es dann möglich über diesen Handle die Breite und Höhe des Bitmaps zu bestimmen?

    Wie meinst du das ? Die Größe des Pic's kannst du doch mit BitBlt bestimmen ...

    Mit

    CBitmap bitmap;
    BITMAP bm;
    
    bitmap.GetBitmap(&bm);
    

    kann man die Width und Height des Bitmap's herausfinden ...

    Gruß
    :: NoName ::



  • Hallo
    mein Code sieht bisher folgerndermaßen aus:

    void CLandscapeDlg::SetLandscape(HBITMAP hBitmap)
    {
      SIZE window;
      m_bmpLandscape.SetBitmap(hBitmap);
      SetBitmapDimensionEx(hBitmap, 674+13, 209+40, NULL); /*2. und 3. Parameter
                                                            sollen ersetzt werden
                                                             durch die Größe des 
                                                               Bitmaps*/
      if (GetBitmapDimensionEx(hBitmap, &window))
      {
        CString str;
        str.Format("x: %d, y: %d", window.cx, window.cy);
        CWnd::MessageBox(str);
      }
      SetWindowPos(GetParent(), 0, 0, window.cx, window.cy, SWP_SHOWWINDOW);
    }
    

    Ich habe also nur ein HBitmap und daraus wollte ich die Größe bestimmen.

    Ist es möglich über dieses HANDLE ein CBitmap zu erzeugen?

    Compufreak



  • Hmm, also möchtest du die Größe herausfinden um dann das Bitmap zu verändern. Ich würde erstmal eine BITMAP-Struktur privat anlegen, da du dann Zugang von überall aus auf die Variable hast. Dann hätte ich nach dem Laden des Bitmap's die Größe in die Struktur geladen und dann in der Funktion SetLandscape() die Höhe und Breite benutzt.

    ...
    private: 
       BITMAP bm;
    

    Dann die Größe des Bitmaps in die Struktur laden :

    void CTestDlg::Test()
    {
       ....
      CBitmap bitmap;
      bitmap.LoadBitmap(...);
      bitmap.GetBitmap(&bm); // Hier die Größe in die Struktur laden
      ......
    }
    

    Und dann die Größe benutzen :

    void CLandscapeDlg::SetLandscape(HBITMAP hBitmap)
    {
      int nWidth = bm.bmWidth;    // Breite laden
      int nHeight = bm.bmHeight;  // Höhe laden
    
      SIZE window;
      m_bmpLandscape.SetBitmap(hBitmap);
      SetBitmapDimensionEx(hBitmap, 674+13, 209+40, NULL);
    

    Jetzt sind in den Variablen nWidth und nHeight die Breite und Höhe des Bitmaps
    vorhanden.

    Jetzt kannste damit machen was du willst !

    Gruß
    :: NoName ::



  • Ich glaube, es gibt nur ein Problem, das Bitmap muss doch als Ressource vorhanden sein, oder? Ich wollte es eigentlich so machen, dass man jedes beliebige Bitmap laden kann. Geht das mit CBitmap?
    Danke für die Hilfe bis hierher.

    MfG
    Compufreak



  • Zum Bsp. so :

    CFileDialog dlg(true,"",NULL,OFN_HIDEREADONLY,"Bitmap (*.bmp)|*.bmp||"); 
        if(dlg.DoModal() == TRUE) 
        { 
            CBitmap bitmap; 
            BITMAP bm; 
            CDC dc;    
            CDC* pDC = GetDC();    
            HBITMAP hPixel = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), dlg.GetFileName(), IMAGE_BITMAP, 0,0, LR_LOADFROMFILE | LR_CREATEDIBSECTION); 
            bitmap.Attach(hPixel); 
            bitmap.GetBitmap(&bm);     
            dc.CreateCompatibleDC(pDC);    
            dc.SelectObject(&bitmap);    
            pDC->BitBlt(80,20,1000,1000, &dc, 0,0, SRCCOPY); 
        }
    

    Gruß
    :: NoName ::



  • Danke :: NoName :: deine Vorschläge waren alle sehr hilfreich. Jetzt klappt es so wie ich es wollte.
    Danke nochmals

    MfG
    Compufreak


Anmelden zum Antworten