Quelle der Bitmap
Mit der Funktion LoadBitmap kann eine Bitmap aus der Ressource geladen werden. Das ist praktikabel, wenn eine begrenzte Zahl festgelegter Bitmaps im Programm verwendet werden.Als Ergebnis erhält man ein Handle auf eine Bitmap vom Typ HBITMAP.
Die BITMAP-Struktur
typedef struct tagBITMAP { LONG bmType; LONG bmWidth; LONG bmHeight; LONG bmWidthBytes; WORD bmPlanes; WORD bmBitsPixel; LPVOID bmBits; } BITMAP; |
bmType | wird auf 0 gesetzt |
bmWidth | die Breite der Bitmap in Pixeln |
bmHeight | die Höhe der Bitmap in Pixeln |
bmWidthBytes | die benötigten Byte pro Zeile (muss durch 2 teilbar sein) |
bmPlanes | Anzahl der Farbebenen |
bmBitsPixel | Anzahl der Bits pro Pixel |
bmBits | Zeiger auf das Bit-Array |
Ermitteln der BITMAP aus einem HBITMAP:
HBITMAP hBitmap; BITMAP bmp; hBitmap = LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP1)); GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&bmp); |
Darstellen einer Bitmap
Kompatibler Devicekontext
Man kann zu einem aktuellen Devicekontext (DC) einen kompatiblen erzeugen, diesen mit der Bitmap verbinden und anschliessend eine Kopie an eine beliebige Stelle des aktuellen DC erzeugen.BITMAP bmp; GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&bmp); HDC hdcBmp; hdcBmp = CreateCompatibleDC(hdc); SelectObject(hdcBmp, hBitmap); BitBlt(hdc,150,120, bmp.bmWidth,bmp.bmHeight, hdcBmp, 0,0, SRCCOPY); |
Im ersten Schritt wird per GetObject eine BITMAP-Struktur gefüllt, um daraus später die Grösse der Bitmap für das Kopieren zu ermitteln. Dann wird der kompatible DC erzeugt (CreateCompatibleDC) und mit der Bitmap verbunden (SelectObject). Jetzt wird per BitBlt in den Ausgangs-DC an die Position 150,120 die Bitmap aus dem kompatiblen DC kopiert.
Bitmap als Pattern
Aus einer Bitmap kann man einen BRUSH erzeugen. Dieser Brush wird für den Device-Kontext angelegt (selektiert) und anschliessend ein Rechteck mit dem Muster gefüllt. Nach dem Zeichnen muss das BRUSH-Objekt wieder freigegeben werden.HBRUSH hbr, hbrPrevious; RECT rc; hbr = CreatePatternBrush(hBitmap); hbrPrevious = (HBRUSH)SelectObject(hdc, hbr); GetClientRect(hWnd, &rc); PatBlt(hdc, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, PATCOPY); SelectObject(hdc, hbrPrevious); DeleteObject(hbr); |
Das Beispiel füllt den gesamten Fensterbereich kachelweise mit der Bitmap.