GetDIBitsからRGB

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: GetDIBitsからRGB

自己レスです

by なおなお » 2005年8月26日(金) 00:10

すぐ下の"BMPをSAVE"で答えが見つかりそうな気がします。
過去ログは見てましたけど、ここを見てませんでした^^:
がんばってやってみます。

なおなお

by なおなお » 2005年8月25日(木) 16:29

文章が不足していると思われますので、補足します。

過去ログの"デスクトップの画像をBMPに"から引用させていただいて。。

'デスクトップのデバイスコンテキスト
Dim hDesktopDC As DWord

'メモリ上のビットマップ
Dim hBmpDC As DWord
Dim hBmp As DWord

'スクリーンのサイズ
Dim x As Long, y As Long

'ファイル書き込み時
Dim hFile As DWord
Dim WriteSize As DWord

'ビットマップの構成データ
Dim BmpBits As DWord
Dim bfh As BITMAPFILEHEADER
Dim bi As BITMAPINFO
Dim BM[1] As Byte



'スクリーンの大きさを取得
x = GetSystemMetrics( SM_CXSCREEN)
y = GetSystemMetrics( SM_CYSCREEN)

'デスクトップ画面のデバイスコンテキスト取得
hDesktopDC = GetDC( GetDesktopWindow())

'メモリ上にビットマップを作る
hBmpDC = CreateCompatibleDC( hDesktopDC)
hBmp = CreateCompatibleBitmap( hDesktopDC, x, y)
SelectObject( hBmpDC, hBmp)

'デスクトップの画面をメモリ上のビットマップにコピー
BitBlt( hBmpDC, 0, 0, x, y, hDesktopDC, 0, 0, SRCCOPY)

'ビットマップの情報とビットデータを取得
bi.bmiHeader.biSize = 40
bi.bmiHeader.biWidth = x
bi.bmiHeader.biHeight = y
bi.bmiHeader.biPlanes = 1
bi.bmiHeader.biBitCount = 24
bi.bmiHeader.biCompression = 0
bi.bmiHeader.biSizeImage = x*y*3
BmpBits = calloc( bi.bmiHeader.biSizeImage)
GetDIBits( hBmpDC, hBmp, 0, y, BmpBits, bi, 0)

'ヘッダのセット
lstrcpy( BM, "BM")
memcpy( VarPtr(bfh.bfType), BM, 2)
bfh.bfSize = bi.bmiHeader.biSizeImage + 54
bfh.bfOffBits = 54

'書き込み
hFile = CreateFile( "C:\desktop.bmp", GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0)
WriteFile( hFile, VarPtr( bfh), 14, VarPtr( WriteSize), ByVal 0)
WriteFile( hFile, VarPtr( bi), 40, VarPtr( WriteSize), ByVal 0)
WriteFile( hFile, BmpBits, bfh.bfSize, VarPtr( WriteSize), ByVal 0)
CloseHandle( hFile)

'ビットデータを開放
free( BmpBits)

'デバイスコンテキスト破棄
ReleaseDC( GetDesktopWindow(), hDesktopDC)

DeleteDC( hBmpDC)
DeleteObject( hBmp)

-------------------------------------------------------------------

上記プログラムの”BmpBits”の中にRGBが入ってる?と思ってるのですが。。
ここから、1点のRGBを求めたいのです(実際は複数点ですが)

よろしくお願いします。

GetDIBitsからRGB

by なおなお » 2005年8月25日(木) 15:10

GetDIBitsで指定範囲のRGB値を点単位で抜き出すってことはできますでしょうか?
GetPixelではできたのですが、処理速度が遅いと聞きました。
できるものなら、速い方法で処理したいと思いましたので。。
よろしくお願いします。

ページトップ