オブジェクト関連2012.11.25 [更新日]2024.12.30
Win32APIでBMP画像などを扱うときに、オブジェクトに関連する関数を使用します。ここでは、代表的な関数の宣言と使用例のサンプルコードとメモを記載します。
ポイント
・LoadImage関数(Win32API)
・SelectObject関数(Win32API)
・DeleteObject関数(Win32API)
・CreateDIBSection関数(Win32API)
・GetDIBits関数(Win32API)
Excelマクロ管理ツール
宣言サンプルコードとメモ
LoadImage関数
アイコン、カーソル、アニメーションカーソル、またはビットマップをロードする。
ビットマップを取得したいときに使用する。
[宣言]
'《アイコン、カーソル、アニメーションカーソル、またはビットマップを読み込む》 ' https://learn.microsoft.com/ja-jp/windows/win32/api/winuser/nf-winuser-loadimagea Declare PtrSafe Function LoadImage Lib "user32.dll" Alias "LoadImageA" ( _ ByVal hinst As LongPtr, _ ByVal lpszName As String, _ ByVal uType As Long, _ ByVal cxDesired As Long, _ ByVal cyDesired As Long, _ ByVal fuLoad As Long) As LongPtr '------------------------------- ' 定数 '------------------------------- ' LoadImageA関数のパラメーター ' 引数 uType Const IMAGE_BITMAP As Long = 0 Const IMAGE_ICON As Long = 1 Const IMAGE_CURSOR As Long = 2 ' 引数 fuLoad Const LR_DEFAULTCOLOR As Long = &H0 Const LR_MONOCHROME As Long = &H1 Const LR_LOADFROMFILE As Long = &H10 Const LR_LOADTRANSPARENT As Long = &H20 Const LR_DEFAULTSIZE As Long = &H40 Const LR_LOADMAP3DCOLORS As Long = &H1000 Const LR_CREATEDIBSECTION As Long = &H2000 Const LR_SHARED As Long = &H8000
[引数]
・hinst:インスタンスのハンドル
・lpszName:イメージの名前または識別子
・uType:イメージのタイプ
・cxDesired:アイコンまたはカーソルの幅
・cyDesired:アイコンまたはカーソルの高さ
・fuLoad:ロードのオプション
[uType の パラメーター]
IMAGE_BITMAP:ビットマップ
IMAGE_ICON:アイコン
IMAGE_CURSOR:カーソル
[fuLoad の パラメーター]
LR_DEFAULTCOLOR:デフォルト。「LR_MONOCHROME」でないと意味する
LR_MONOCHROME:白黒イメージとしてロード
LR_LOADFROMFILE:外部ファイルからロード。指定がないとリソースの名前と認識
LR_LOADTRANSPARENT:最初のピクセルを取得し、対応するウィンドウカラーに置き換える
LR_DEFAULTSIZE:幅・高さの指定が「0」の場合、システムメトリック値のサイズが使われる
LR_LOADMAP3DCOLORS:ColorTableを検索し、該当の灰色を対応する3Dカラーに置換
LR_CREATEDIBSECTION:uTypeにIMAGE_BITMAPを指定すると、DIBセクションBMPが返る
LR_SHARED:イメージを2回以上ロードする場合に、同じハンドルを使う
[メモ]
外部ファイルからビットマップファイルをロードする場合、次のように ファイルパスと LR_LOADFROMFILE で取得する。
例:hdlBitmap = LoadImage(0, FilePath, 0, 0, 0, LR_LOADFROMFILE)
尚、LoadImage関数でロードした画像はDeleteObject関数で破棄する。
使用例のサンプルコード
SelectObject関数
指定したDC(デバイスコンテキスト)に、指定したオブジェクトを選択する。
DCに、ロードしたBMPを設定したり、ペン・ブラシやフォントなどの属性を設定する場合に使用する。
[宣言]
'《指定したデバイス コンテキストにオブジェクトを選択》 ' https://learn.microsoft.com/ja-jp/windows/win32/api/wingdi/nf-wingdi-selectobject Declare PtrSafe Function SelectObject Lib "gdi32.dll" ( _ ByVal hDC As LongPtr, _ ByVal hObject As LongPtr) As LongPtr
[引数]
・hDC:対象のDCハンドル
・hObject:選択対象のペン、ブラシ、フォント、ビットマップなどのオブジェクトのハンドル
[メモ]
この関数は、指定したものと同じタイプで、それまで選択されていたオブジェクトを返す。
新しいオブジェクトを使い終えたら、元のオブジェクトを選択し直す。
使用例のサンプルコード
DeleteObject関数
ペン、ブラシ、フォント、ビットマップ、リージョン、パレットなどのオブジェクトを削除。
そのオブジェクトに関連付けられていたすべてのシステムリソースを解放。オブジェクトを削除した後は、指定されたハンドルは無効になる。
LoadImage関数で読み込んだBMPを削除する場合などに使用。
[宣言]
'《指定したオブジェクトを削除》 ' https://learn.microsoft.com/ja-jp/windows/win32/api/wingdi/nf-wingdi-deleteobject Declare PtrSafe Function DeleteObject Lib "gdi32.dll" ( _ ByVal hObject As LongPtr) As Long
hObject:ペン、ブラシ、フォント、ビットマップなどのオブジェクトのハンドルを指定。
使用例のサンプルコード
CreateDIBSection関数
デバイス独立のビットマップ(DIB)を作成。
[宣言]
'《アプリケーションが直接書き込むことができる DIB を作成》 ' https://learn.microsoft.com/ja-jp/windows/win32/api/wingdi/nf-wingdi-createdibsection Declare PtrSafe Function CreateDIBSection Lib "gdi32.dll" ( _ ByVal hDC As LongPtr, _ ByRef pbmi As BITMAPINFO, _ ByVal uUsage As Long, _ ByVal ppvBits As LongPtr, _ ByVal hSection As LongPtr, _ ByVal dwOffset As Long) As LongPtr
[引数]
・hDC:対象とするDCのハンドル。iUsageがDIB_PAL_COLORSの場合、論理パレット使いDIBの色を初期化
・pbmi:DIB のサイズや色情報などの属性を格納しているビットマップデータ
・iUsage:BITMAPINFO構造体のbmiColorsメンバの配列データ種類の指定
DIB_PAL_COLORS hdcに指定のDCの論理パレットに関係する16ビットのインデックス番号
DIB_RGB_COLORS BITMAPINFO 構造体は RGB 値からなる配列を保持
・ppvBits:ビット値。ここの変数に、DIBのビット値が置かれている場所が格納される
・hSection:DIBを作成するために、関数が使うファイルマッピングオブジェクトのハンドルを指定
・dwOffset:ビットマップのビット値へのオフセット
使用例のサンプルコード
GetDIBits関数
指定されたビットマップのビットを取得し、指定された形式でバッファへコピー。
[宣言]
'《指定した互換性のあるビットマップのビットを取得し指定した形式で DIB としてバッファーにコピー》 ' https://learn.microsoft.com/ja-jp/windows/win32/api/wingdi/nf-wingdi-getdibits Declare PtrSafe Function GetDIBits Lib "gdi32" ( _ ByVal hDC As LongPtr, _ ByVal hBmp As LongPtr, _ ByVal uStartScan As Long, _ ByVal cScanLines As Long, _ ByRef lpvBits As Any, _ ByRef lpBmi As BITMAPINFO, _ ByVal uUsage As Long) As Long
[引数]
・hDC:DCのハンドルを指定
・hBmp:ビットマップのハンドルを指定
・nStartScan:取得対象の最初の走査行を指定
・cScanLines:取得対象の走査行の数を指定
・lpvBits :ビットマップ データを受け取るバッファーへのポインター
このパラメーターが 0 の場合、関数はビットマップの次元と形式を lpbmi パラメーターが指す BITMAPINFO 構造体に渡す
・lpBmi:ビットマップデータのバッファ。DIBデータを保持している、BITMAPINFO構造体を指定
・uUsage:BITMAPINFO 構造体のbmiColorsメンバの形式を指定
DIB_PAL_COLORS hdcに指定のDCの論理パレットに関係する16ビットのインデックス番号
DIB_RGB_COLORS BITMAPINFO 構造体は RGB 値からなる配列を保持
使用例のサンプルコード