Windows Programmierung: Bitmaps |
Als Ergebnis erhält man ein Handle auf eine Bitmap vom Typ HBITMAP.
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); |
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.
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.
Homepage - Windows-API-Programmierung | (C) Copyright 2000 Arnold Willemer |