トップ > 備忘録 > オブジェクト関連

オブジェクト関連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 値からなる配列を保持

使用例のサンプルコード


ページトップへ戻る
Copyright(C) 2009- 坂江 保 All Rights Reserved.