CreateBitmap()



  • Möchte ein Bitmap mit einer bestimmten Farbe erstellen.
    Das Bitmap soll 16 * 16 pixel groß sein und Beispielsweise komplett rot.
    Wie mach ich das?



  • Graphics::TBitmap *BrushBmp = new Graphics::TBitmap;
    BrushBmp->Width = 16;
    BrushBmp->Height = 16;
    BrushBmp->Canvas->Brush->Color = clRed;
    BrushBmp->Canvas->Rectangle(0,0,16,16); 
    
    BrushBmp->SaveToFile("deinebmp.bmp");
    

    So würde ich das lösen.

    MfG
    Tippo

    Edit:

    Freigeben des Speichers nie vergessen:

    delete BruhBmp;
    

    😉



  • Möchte es gerne mit HBITMAP machen geht das?



  • Hat jemand eine C lösung nicht C++?

    Wenn nicht:
    Was muss ich für Graphics::TBitmap includen?



  • TBitmap ist glaube ich Borlands VCL-Kram.

    // GDI+-Variante:
    
    // Hier GDI+ initialisieren
    // (siehe msdn)
    
    // Bitmap-Objekt erzeugen:
    Bitmap *myBmp=new Bitmap(16,16,PixelFormat24bppRGB);
    
    // Graphics-Objekt erzeugen, welches unser Bitmap-Objekt manipulieren soll:
    Graphics *gfx=new Graphics(myBmp);
    
    // Clear() mit Farbe rot anwenden:
    gfx->Clear(Color.Red);
    
    // Graphics-Objekt brauchen wir nicht mehr:
    delete gfx;
    
    // Jetzt Bitmap speichern oder sonstwas damit anstellen:
    // ...
    

    Bei Standard GDI:
    Bitmap erzeugen mit CreateCompatibleBitmap() z.B.
    In ein DC selektieren (z.B. mit CreateCompatibleDC() den DC erzeugen)
    und dann z.B. FillRect() oder sowas benutzen.



  • Möchte die standard GDI Version benutzen, aber meine Bitmaps sind alle schwarz
    Mache ich was falsch?

    width und height sind Parameter und beide 16

    RECT rect = {0, 0, width, height};
      HBITMAP bitmap, temp;
      HBRUSH hBgBrush;
      HDC hdc = GetDC(hWndMain);
      HDC temp_hdc = CreateCompatibleDC(hdc);
    
      bitmap = CreateCompatibleBitmap(hdc, width, height);
      SelectObject(hdc, bitmap);
      hBgBrush = CreateSolidBrush(RGB(255,0,0));
      FillRect(hdc, &rect, hBgBrush);
    
      DeleteObject(hBgBrush);
      ReleaseDC(hWndMain, hdc);
      ReleaseDC(hWndMain, temp_hdc);
    


  • RECT rect = {0, 0, width, height};
      HBITMAP bitmap;
      HBRUSH hBgBrush;
      HDC hdc = GetDC(hWndMain);
      HDC temp_hdc = CreateCompatibleDC(hdc);
    
      // Bitmap erzeugen und in temp_hdc selektieren:
      bitmap = CreateCompatibleBitmap(hdc, width, height);
      HGDIOBJ previousBitmap=SelectObject(hdc, bitmap);
    
      // Brush erzeugen und auf temp_hdc anwenden (wo die Bitmap drin liegt)
      hBgBrush = CreateSolidBrush(RGB(255,0,0));
      FillRect(temp_hdc, &rect, hBgBrush);
      DeleteObject(hBgBrush);
    
      // Inhalt von temp_hdc nach hdc kopieren an Stelle xDst/yDst:
      BitBlt(hdc,xDst,yDst,16,16,temp_hdc,0,0,SRCCOPY);
    
      // Aufräumen:
      SelectObject(temp_hdc,previousBitmap);
      DeleteDC(temp_hdc);
      ReleaseDC(hWndMain,hdc);
    

Anmelden zum Antworten