開発環境は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
2番目の引数はビットマップがインデックスカラーで構築されている時は
DIB_PAL_COLORSじゃないのでしょうか?
試したわけじゃないので外していたらごめんなさい。
ご指摘のとおり、DIB_PAL_COLORSにしてみましたが、
やはり正常な色にはなりません。
ちなみに表示時はBitBltでSRCCOPYしてます。
BitBlt hDC, 0, 0, Width, Height, hMemDC, 0, 0, SRCCOPY
SetDIBColorTableもやってみましたがダメでした。
自己解決しました。
LastDllErrorでエラーを拾ってみたらCreateDIBSection
の直後にエラー番号=8で返って来ていました。
エラーメッセージは
「このコマンドを実行するのに十分な記憶域がありません。」
なので、CreateDIBSection後の動作が不安定になっていました。