Navigation
Artikel
Stuff
RSS Feeds
|
Sourcecodes - Bitmaps manipulierenSprachenübersicht/C / C++/ C#/Grafik 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; }
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? Sprachenübersicht/C / C++/ C#/Grafik/Bitmaps manipulieren |