Sourcecodes - Bitmaps manipulieren

Sprachenübersicht/C / C++/ C#/Grafik

Bitmaps manipulieren

Diese Seite wurde 2689 mal aufgerufen.

Dieser Artikel wurde in einem Wikiweb System geschrieben, das heißt, Sie können die Artikel jederzeit editieren, wenn Sie einen Fehler gefunden haben, oder etwas hinzufügen wollen.

Editieren Versionen Linkpartnerschaft Bottom Printversion

Keywords: bitmap, manipulating, manipulation, grafik, ändern, verändern, farben, shader, emulieren, emulation

Die folgende Funktion manipuliert ein bestehendes Bild Pixel für Pixel, die Funktion nutzt dabei eine Callback Funktion als Manipulator:

Code:

HBITMAP ManipulateBitmap(DWORD (*_SetPixel)(DWORD _x, DWORD _y, DWORD _oldcolor, BITMAP &bm), LPCSTR _file)
{
    DWORD _width, _height;
    HBITMAP _bitmap, DestBitmap;
    HBITMAP newBitmap=NULL;

    if(!_file) return NULL;
    
    _bitmap= (HBITMAP)LoadImage(0,_file,IMAGE_BITMAP, 0, 0, 
                 LR_DEFAULTSIZE|LR_LOADFROMFILE|LR_CREATEDIBSECTION);  

    
    if(!_bitmap) return NULL;

    BITMAP bm;
    GetObject(_bitmap, sizeof(bm), &bm);

    _width=bm.bmWidth;
    _height=bm.bmHeight;

    DestBitmap=CreateBitmapIndirect(&bm);

    if(!_bitmap) return NULL;

    HDC SrcDC=CreateCompatibleDC(NULL);;
    SelectObject(SrcDC,_bitmap);

    HDC DestDC=CreateCompatibleDC(NULL);;
    SelectObject(DestDC,DestBitmap);

    DWORD col,col1,tmp;
    for(DWORD y=0; y<_height; y++)
        for(DWORD x=0; x<_width; x++)
        {
col1=GetPixel(SrcDC,x,y);
            tmp=(GetRValue(col1)<<16) | (GetGValue(col1)<<8) | (GetBValue(col1));

            col=_SetPixel(x,y, tmp, bm);
            
            SetPixel(DestDC,x,y,(col & 0xff00) | ((col >> 16) & 0xff) | ((col << 16) & 0xff0000));
        }
    DeleteDC(DestDC);
    DeleteDC(SrcDC);
    DeleteObject(_bitmap);

    return DestBitmap;
}



Beispiel (färbt Bitmap grün):

Code:


DWORD SetPixelCallback(DWORD x, DWORD y, DWORD oldcolor, BITMAP &bm)
{
    return 0x00ff00;
}

...
//irgendwo
HBITMAP hBmp = ManipulateBitmap(SetPixelCallback,"bitmap.bmp");
//tu etwas mit dem manipuliertem bitmap
...
//Wieder alles frei geben
DeleteObject(hBmp);

Gibt es noch irgendwelche Fragen, oder wollen Sie über den Artikel diskutieren?

Editieren Versionen Linkpartnerschaft Top Printversion

Haben Sie einen Fehler gefunden? Dann klicken Sie doch auf Editieren, und beheben den Fehler, keine Angst, Sie können nichts zerstören, der Artikel kann wiederhergestellt werden.

Sprachenübersicht/C / C++/ C#/Grafik/Bitmaps manipulieren