Good evening
I have a problem. I need my desktop in a pixmap and the GDI function "GetPixel" is too slow. After hours of search I have found this code.
<Click>
Sounds logical, i need a pointer to the pixel data, easy.
The Blitz Max version:
I´m tired and disappointed.
The GetDIBits function returns 0 and I dont know where the problem is (Wrong Type structure, Wrong Ptr?)
Thx for help.
Mfg Suco
I have a problem. I need my desktop in a pixmap and the GDI function "GetPixel" is too slow. After hours of search I have found this code.
<Click>
Sounds logical, i need a pointer to the pixel data, easy.
The Blitz Max version:
Strict Extern "Win32" Function GetDIBits(hdc:Int, bitmap:Int, Start:Int, Num:Int, bits:Byte Ptr, lpbi:Byte Ptr, usage:Int) Function CreateCompatibleBitmap(hdc:Int, Width:Int, Height:Int) Function CreateDIBSection(hdc:Int, pbmi:Byte Ptr, usage:Int, Bits:Byte Ptr, hSection:Int, Offset:Int) Function SelectObject(hdc:Int, obj:Int) Function CreateCompatibleDC(hdc:Int) Function GetDesktopWindow() Function GetWindowDC(hwnd:Int) Function GetDeviceCaps(hdc:Int, index:Int) Function DeleteDC(hdc:Int) Function DeleteObject(obj:Int) Function ReleaseDC(hwdn:Int, hdc:Int) End Extern Type RGBQuad Field R:Byte Field G:Byte Field B:Byte Field Res:Byte End Type Type BITMAPINFOHEADER Field biSize:Int Field biWidth:Long Field biHeight:Long Field biPlanes:Short Field biBitCount:Short Field biCompression:Int Field biSizeImage:Int Field biXPelsPerMeter:Long Field biYPelsPerMeter:Long Field biClrUsed:Int Field biClrImportant:Int End Type Type BITMAPINFO Field bmiHeader:Byte Ptr Field bmiColors:Byte Ptr End Type Const HORZRES:Int = 8 Const VERTRES:Int = 10 Local HwndDesktop:Int Local hdcDesktop:Int Local hdcMem:Int Local DesktopWidth:Int Local DesktopHeight:Int Local bmpMem:Int Local Header:BITMAPINFOHEADER Local INFO:BITMAPINFO Local Buf:Byte Ptr DebugLog "" HwndDesktop = GetDesktopWindow() If HwndDesktop DebugLog "Desktop Hwnd found" EndIf hdcDesktop = GetWindowDC(HwndDesktop) If hdcDesktop DebugLog "Desktop DC found" EndIf hdcMem = CreateCompatibleDC(hdcDesktop) If hdcMem DebugLog "Compatible dc created" EndIf DesktopWidth = GetDeviceCaps(hdcDesktop, HORZRES) DebugLog "DesktopWidth: "+DesktopWidth DesktopHeight = GetDeviceCaps(hdcDesktop, VERTRES) DebugLog "DesktopHeight: "+DesktopHeight bmpMem = CreateCompatibleBitmap(hdcDesktop, DesktopWidth, DesktopHeight) If bmpMem DebugLog "Compatible bitmap created" EndIf If SelectObject(HdcMem, bmpMem) DebugLog "bmpMem selected into the dcMem" EndIf Header = New BITMAPINFOHEADER Header.biSize = SizeOf(Header) Header.biWidth = DesktopWidth Header.biheight = DesktopHeight Header.biPlanes = 1 Header.biBitCount = 24 Header.biCompression = 0 INFO = New BITMAPINFO Info.bmiHeader = Header If BitBlt(hdcMem,0,0,Header.biWidth,Header.biHeight, hdcDesktop,0,0,ROP_SRCCOPY) DebugLog "BitBlt successful" EndIf If GetDIBits(hdcMem, bmpMem, 0, Header.biHeight, Buf, info, 0) DebugLog "GetDIBits successful" Else DebugLog "WHY...WHYYYY?????" EndIf DebugLog "" DeleteDC(HdcMem) DeleteObject(bmpMem) ReleaseDC(hwndDesktop, hdcDesktop)
I´m tired and disappointed.
The GetDIBits function returns 0 and I dont know where the problem is (Wrong Type structure, Wrong Ptr?)
Thx for help.
Mfg Suco