CreateDIBSectionで作成された画像の色を正しく表示するには?

解決


アクセル  2004-06-18 10:38:30  No: 84090  IP: [192.*.*.*]

開発環境はWindows2000/VB6でAPI関数を使用しています。

バイナリファイルを読込んでDIBをCreateDIBSectionで作成し
PictureBoxに表示しているのですが、
表示された色が期待されている色と違ってしまいます。

取得したカラーテーブルの確認とビットマップデータのインデックスも
確認したのですが、CreateDIBSectionをする直前まで正しくとれている
ようです。原因として何が考えられるのでしょうか?
ちなみにカラーテーブルのサイズは256色です。

下記にCreateDIBSectionとピクチャボックス表示時のコードを
抜粋します。

Public Function DIBCreate(ByVal hdc As Long, ByRef rtnDIB As ClassDIB) As Boolean
    
    Dim BI As BITMAPINFO
    
    ReDim BI.bmiColors(2 ^ rtnDIB.bmi.biBitCount - 1)
    BI.bmiHeader = rtnDIB.bmi
    BI.bmiColors = rtnDIB.colortbl
    
    rtnDIB.hMemDC = hdc
    rtnDIB.hDIBSection = CreateDIBSection(rtnDIB.hMemDC, BI, DIB_RGB_COLORS, rtnDIB.lpDIB, 0, 0)
    rtnDIB.hOldBmp = SelectObject(rtnDIB.hMemDC, rtnDIB.hDIBSection)
    Call RtlMoveMemory(rtnDIB.lpDIB, rtnDIB.bmpdata(0), _ rtnDIB.bmi.biSizeImage)
        
    DIBCreate = True

End Function

編集 削除
ともみ  2004-06-18 11:21:54  No: 84091  IP: [192.*.*.*]

2番目の引数はビットマップがインデックスカラーで構築されている時は
DIB_PAL_COLORSじゃないのでしょうか?

試したわけじゃないので外していたらごめんなさい。

編集 削除
アクセル  2004-06-18 13:56:28  No: 84092  IP: [192.*.*.*]

ご指摘のとおり、DIB_PAL_COLORSにしてみましたが、
やはり正常な色にはなりません。

ちなみに表示時はBitBltでSRCCOPYしてます。
BitBlt hDC, 0, 0, Width, Height, hMemDC, 0, 0, SRCCOPY

SetDIBColorTableもやってみましたがダメでした。

編集 削除
アクセル  2004-06-24 15:13:10  No: 84093  IP: [192.*.*.*]

自己解決しました。

LastDllErrorでエラーを拾ってみたらCreateDIBSection
の直後にエラー番号=8で返って来ていました。
エラーメッセージは
「このコマンドを実行するのに十分な記憶域がありません。」

なので、CreateDIBSection後の動作が不安定になっていました。

編集 削除