タイトル : 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を意識して使用したつもりでしたが いつの間にか混同していたようです。 |