tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^5: GetDIbitsの使用方法について
投稿日: 2014/03/17(Mon) 21:26
投稿者還暦手習い
魔界の仮面弁士様

非常に詳しく、丁寧にご指導いただき大変ありがとうございます。
感謝。感謝です。
まだまだすべてを理解するにいたっておりませんが、週末からの3連休はしっかり勉強させていただ
きます。

取り急ぎお礼を申し上げたく、中途半端な内容ですが投稿させていただきました。
本当にありがとうございます。

-------------------------------------------------------------------------------------------
No.15865
本件をExcel2013のVBAで試しました。

>'あらためて、ビットマップ情報を取得しなおす
>ReDim pixel(bmpinfo.bmiHeader.biSizeImage - 1) As Byte
>GetDIBits hMemDC, hBmp, 0, Abs(bmpinfo.bmiHeader.biHeight), pixel(0), bmpinfo, DIB.RGB_COLORS

こちらではpixel()は2次元配列を使用したいので、またDIB.RGB_COLORSを改めて宣言していないので
GetDIBits hMemDC, hBmp, 0, Abs(bmpinfo.bmiHeader.biHeight), pixel(0, 0), bmpinfo, 0
としてやってみました。

>'ビットマップの走査方向(トップダウン/ボトムアップ)を変更したい場合は、
>'biHeightの符号を逆転させてください。

正しくGetDIBitsできたかを検証するため
  px = UBound(pixel, 1)
    py = UBound(pixel, 2)
  For i = 0 To px
        For j = 0 To py
            Sheets("WORK").Cells(j + 1, i + 1).Interior.Color = pixel(i, j)
        Next
    Next

結果は@上下逆になって表示される。
   A色がおかしい。(青系統と茶系統が逆に表示される)

   @は>biHeightの符号を逆転させてください。で解決するかと思い
    ReDim pixel(Me.Frame1.Width - 1, Me.Frame1.Height - 1) As Long
  
      '高さを−にするとビットマップが逆転する
      bmpinfo.biHeight = -bmpinfo.biHeight
      GetDIBits hMemDC, hBmp, 0, bmpinfo.biHeight, pixel(0, 0), bmpinfo, 0

    としてみましたが、今度はExcelのSheetsは真っ黒になってしまいました。

★もう少しじっくり取り組んでみます。それでもダメな場合はAPIの宣言やプログラムの詳細
まで含めて明示した投稿として質問させていただきます。
-----------------------------------------------------------------------------------
No.15863
>やはり、PictureBox の hDC プロパティを使っておられたのですね。
>これでは、デバイスコンテキストの意味が変わってきますよ。
>(ちなみに、AutoRedraw プロパティは何にセットされていますか?)

    AutoRedrawはFalseに設定しています。

>No15857 では、「GetDC」で得た DC に処理しようとしていたのに、
>今回の No15862 では、「hDC プロパティ」で得た DC に対して
>処理しようとしています。そもそもの描画対象が異なっているわけです

    VB6で過去作成した例を示させていただきましたが、今回はVBAを意識した
    ためhDCプロパティを使用せず、GetDCを意識して使用したつもりでしたが
    いつの間にか混同していたようです。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。