我有下面的Ruby代码,我正在使用WindowsAPI调用,我应该能够使用函数GetDIBits从我创建的位图中检索RGB值数组,用于AI处理。我需要为GetDIBits函数提供一个BITMAPINFO结构以及一些其他变量。我应该可以接受其他变量,但是如何在ruby中创建一个可用于该函数的结构(使用WindowsAPI)?请看下面的代码如果您能完成GetDIBits函数以便我可以检索一组RGB值,我将不胜感激。谢谢马丁defgetscreen()width=Win32API.new("User32.dll","GetSystemMetrics",["L"],"L").call(0)
我目前正在编写一个扫描屏幕并查找像素的小程序。我的问题是GetDIBits函数似乎没有返回正确的屏幕截图。将位图复制到剪贴板会将正确的屏幕图像放入剪贴板。我决定将函数的输出打印到一个BMP文件,以了解发生了什么,这显然不是我所期望的。我还会提到我有3个显示器,以防它可以解释为什么它的行为不像预期的那样。classTest{intscreenWidth;intscreenHeight;HWNDtargetWindow;HDCtargetDC;HDCcaptureDC;RGBQUAD*pixels;HBITMAPcaptureBitmap;boolTakeScreenshot(){Zero
我编写了以下代码(C++Win32)来捕获游戏窗口屏幕并从图像中获取像素颜色数组。函数autoB()完成这项工作。然后我将结果数组绘制到我的窗口中以直观地检查我得到了什么。问题是这个程序只在我启动计算机后运行一次,在第一次“缓存”从游戏中截取的第一个屏幕截图后,我总是得到相同的像素阵列。即使我关闭并重新启动程序,我也会得到相同的屏幕截图。游戏未使用DirectX在屏幕上绘图,我始终可以使用Alt+PrtSc截取屏幕截图。如果您能帮助理解为什么会这样发生,我们将不胜感激。intgetPixels(HDC*eClientHdcMem,HBITMAP*eClientBmp,unsignedc
我正在抓取屏幕的一部分并扫描特定颜色范围的像素。我看了MSDN'sCapturinganImage示例并知道如何使用这些函数。我可以将这些位放入数组中,但我不确定如何以可以像处理图像一样遍历数组的方式进行操作。一个伪示例(我敢肯定它离我很远):for(x=1;x这基本上就是我想要做的,所以如果红色、蓝色和绿色是某种颜色,我就会知道它在图像中(x,y)的坐标。我只是不知道如何以这种方式使用GetDIBits,以及如何适本地设置数组以实现此目的。 最佳答案 除了已经给出的好的答案之外,这里还有一个示例,说明如何获得一个简单的数组结构来行
获取图标的位图数据分两次使用GetDIBits(),以便于正确设置缓存的大小正确设置BITMAPINFO的大小,否则就会报堆栈溢出错误ICONINFOinfo={0};GetIconInfo(hIcon,&info)HDCbmp,maskbmp;bmp=CreateCompatibleDC(NULL);SelectObject(bmp,info.hbmColor);maskbmp=CreateCompatibleDC(NULL);SelectObject(maskbmp,info.hbmMask);BYTE*lpvBits=NULL;intnRet=2;//正确设置BITMAPINFO的大小,
获取图标的位图数据分两次使用GetDIBits(),以便于正确设置缓存的大小正确设置BITMAPINFO的大小,否则就会报堆栈溢出错误ICONINFOinfo={0};GetIconInfo(hIcon,&info)HDCbmp,maskbmp;bmp=CreateCompatibleDC(NULL);SelectObject(bmp,info.hbmColor);maskbmp=CreateCompatibleDC(NULL);SelectObject(maskbmp,info.hbmMask);BYTE*lpvBits=NULL;intnRet=2;//正确设置BITMAPINFO的大小,