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を求めたいのです(実際は複数点ですが)
よろしくお願いします。
文章が不足していると思われますので、補足します。
過去ログの"デスクトップの画像を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を求めたいのです(実際は複数点ですが)
よろしくお願いします。