Python Win32APIbitmap.GetBitmapBits()

2024-09-24 22:27:14 发布

您现在位置:Python中文网/ 问答频道 /正文

只是一个我还没有找到任何细节的问题:我正在使用pythonwin32api捕捉我的计算机的屏幕截图。我想推出我自己的图像压缩算法(为了好玩,我不期待专业水平的结果),但我很难理解我从位图本身获得的像素数据。以下是相关代码:

width = win32api.GetSystemMetrics(win32con.SM_CXVIRTUALSCREEN)
height = win32api.GetSystemMetrics(win32con.SM_CYVIRTUALSCREEN)
left = win32api.GetSystemMetrics(win32con.SM_XVIRTUALSCREEN)
top = win32api.GetSystemMetrics(win32con.SM_YVIRTUALSCREEN)

hwin = win32gui.GetDesktopWindow()
hwindc = win32gui.GetWindowDC(hwin)
srcdc = win32ui.CreateDCFromHandle(hwindc) 

memdc = srcdc.CreateCompatibleDC()                                             

bmp = win32ui.CreateBitmap()    
bmp.CreateCompatibleBitmap(srcdc, width, height)    
memdc.SelectObject(bmp)         


memdc.BitBlt((0, 0), (width, height), srcdc, (left, top), win32con.SRCCOPY) 
bmpinfo = bmp.GetInfo()
bmpInt = bmp.GetBitmapBits(False)

GetBitmapBits(False)返回整数数组/元组。但是我找不到任何关于bmpInt如何与像素数据相关的信息。输出如下:

^{pr2}$

这些如何对应于每个像素的RGB值?每3个整数是一个像素吗?或者有阿尔法通道吗?还有,为什么会有负数呢?以下是文档供参考:http://docs.activestate.com/activepython/2.4/pywin32/PyCBitmap__GetBitmapBits_meth.html 没有任何解释。。。在


Tags: 数据top像素widthleftsmheightbmp
1条回答
网友
1楼 · 发布于 2024-09-24 22:27:14

好吧,回答我自己的问题,以防其他人也有同样的问题。GetBitmapBits(False)为每个像素的rg和B值返回一个整数。所以:

14,16,17,-1

表示α通道的R:14、G:16、B:17和-1。负数实际上是255的偏移量,所以上面的-112等于255-112,或者143。在

相关问题 更多 >