Home | Lehre | Videos | Texte | Vorträge | Software | Person | Impressum, Datenschutzerklärung | Blog RSS

Aufgabe 2: Bitmap-Effekt

Wegen der hohen Teilnehmerzahl weiterhin in Zweier-Gruppen!

Erweitern Sie das Programm von Aufgabe 1 um ein verschiebbares Bild, das zu Programmstart aus dem Projektverzeichnis geladen wird (BMP-Format, 24 Bit). Ergänzen Sie ein Menü, mit dem man auf das Bild einen Weichzeichner-Effekt und einen Solarisationseffekt anwenden können.

Mögliche Erweiterungen: Bild per Datei-Dialogbox auswählen, weitere Effekte, Effekte mit Maus malen.

Hilfe zur Implementierung:

// zusätzliche globale Variablen
HDC hBitmapDC = NULL;
BITMAP bitmap;

// Initialisierung ganz zu Beginn von WinMain
HBITMAP hBitmap = (HBITMAP)LoadImage(hInstance, "MeinBild.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&bitmap);
HDC hScreenDC = CreateDC("DISPLAY", NULL, NULL, NULL);
hBitmapDC = CreateCompatibleDC(hScreenDC);
HBITMAP old_hBitmap = (HBITMAP)SelectObject(hBitmapDC, hBitmap);

// Freigabe am Ende von WinMain
SelectObject(hBitmapDC, old_hBitmap);
DeleteObject(hBitmap);
DeleteDC(hBitmapDC);
DeleteDC(hScreenDC);

// direktes Zeichnen nach WM_PAINT
// für Effekte Zwischenspeicher nötig!
{
    int x, y;
    for(x=0; x<bitmap.bmWidth; ++x)
    {
        for(y=0; y<bitmap.bmHeight; ++y)
        {
            COLORREF c = GetPixel(hBitmapDC, x, y); // Hier sind die RGB-Werte verfügbar!
            SetPixel(hdc, x+42, y+13, c); // dumme Art, das Bild darzustellen
        }
    }
}