3

詳細を見つけることができなかった簡単な質問です。python win32api を使用して、コンピューターのスクリーンショットをキャプチャしています。独自の画像圧縮アルゴリズムを展開したいのですが (楽しみのために、プロレベルの結果は期待していません)、ビットマップ自体から取得しているピクセルデータを理解するのに苦労しています。関連するコードは次のとおりです。

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 がピクセル データにどのように関連しているかについての情報は見つかりません。出力は次のようになります。

123,1,-1,-13,-55,2,23,123 ...

これらは各ピクセルの RGB 値にどのように対応していますか? 3 int ごとに 1 ピクセルですか? それともアルファチャンネルはありますか?また、なぜ負の数があるのですか?参考までに、ドキュメントは次のとおりです。http://docs.activestate.com/activepython/2.4/pywin32/PyCBitmap__GetBitmapBits_meth.html 説明はありません...

4

1 に答える 1

6

他の誰かが同じ問題を抱えている場合に備えて、自分の質問に答えます。GetBitmapBits(False) は、各ピクセルの各 RG および B 値の整数を返します。そう:

14、16、17、-1

R:14、G:16、B:17、およびアルファ チャネルの -1 を表します。負の数は実際には 255 からのオフセットであるため、上記の -112 は 255 - 112 または 143 に相当します。

于 2013-09-12T02:31:33.963 に答える