Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
  • ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAで配列からbmp画像を出力する方法)

VBAで配列からbmp画像を出力する方法

このQ&Aのポイント
  • VBAで配列からbmp画像を出力する方法を教えてください。
  • dim a(255,255)で作成した二次元配列があり、それぞれの中に0~255の数値が格納されているとします。この画像からグレースケールあるいは任意の配色で256x256の解像度のbmp画像を出力するプログラムをVBAで作りたいのですがどのようにすれば良いですか?
  • 検索して調べたのですが、 http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=54343;id=excel http://akadamashy.blog68.fc2.com/blog-entry-915.htmlのサイトにビットマップ画像を出力するためのプログラムが記載されていました。しかしながら、どうしても配列からどうやって出力すれば良いか分かりません。どなたか教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.2

> Sub sample()のところでp(500,500)の各配列に1か0を代入していますが、 > 0~255までのカラーを使いたい場合には、 > With RGBQUAD(0)で0~255まで全て定義する必要があるのでしょうか? 先の回答で示したページをよく読んでください。 > 変数kを0から7まで繰り返して、* 2 ^ (7 - k)を足していく操作が理解できないのですが > 何をやっているのでしょうか? 実際にそのコードを実行し、数値を変更したりしてどのような画像が出来上がるのか試してみてください。理解しなくても関係の無いところだと思われますが。 > また、式の中で「\」マークが出てきますがこれは何を意味しているのでしょうか? 実際にご自身で計算式を作って試してみればわかることです。 以下の2行を実行してみてください。 Debug.Print 10 \ 3 Debug.Print 10 / 3 演算子 http://www.officepro.jp/excelvba/basic/index6.html 何もせず示したページもろくに読まないで質問ばかりするのはやめましょう。時間の無駄です。

Taruuuto
質問者

お礼

ありがとうございます。 自分でいろいろと試してもう一歩のところなのですが、 .biBitCount = 8 を指定した後に For ddd = 0 To 255 With RGBQUAD(ddd) .rgbRed = ddd .rgbGreen = ddd .rgbBlue = ddd End With Next でRGBQUADに255通りの配色を設定する必要があることは分かりました。 これらの色を使いたいのですが、 p()に0や1以外の50などの値を代入すると * 2 ^ (7 - k)を足していく操作の過程でオーバーフローしてしまいます。 モノクロビットマップと256色ビットマップで p配列をbuf配列に移す方法が異なるように思うのですが どのようにすれば良いでしょうか? 恐らく、ここさえクリアできれば完成できると思います。 よろしくお願いいたします。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.1

質問者さんが調べたと示された最初のサイトに、配列から出力するコードが最後に回答として出されてますが、それを参考にしてみてはいかがですか。 以下のサイトも参考にしてください。 BMP ファイルフォーマット http://www.kk.iij4u.or.jp/~kondo/bmp/

Taruuuto
質問者

お礼

上記のサイトの中で With RGBQUAD(0)   .rgbRed = 200   .rgbGreen = 255   .rgbBlue = 255 End With With RGBQUAD(1)   .rgbRed = 200   .rgbGreen = 200   .rgbBlue = 100 End With というところですが、 Sub sample()のところでp(500,500)の各配列に1か0を代入していますが、 0~255までのカラーを使いたい場合には、 With RGBQUAD(0)で0~255まで全て定義する必要があるのでしょうか? それと For j = 1 To Ny  For i = 1 To (Nx \ 8) * 8 Step 8   l = i \ 8 + 1   For k = 0 To 7     buf(l, j) = buf(l, j) + p(i + k, j) * 2 ^ (7 - k)   Next  Next  If (Nx \ 8) * 8 < Nx Then   l = i \ 8 + 1   For k = 0 To Nx - (Nx \ 8) * 8 - 1     buf(l, j) = buf(l, j) + p(i + k, j) * 2 ^ (7 - k)   Next  End If Next ここでやっているのは、pに入っているデータをbuf配列に移しているということは分かるのですが、 xとyをforループで繰り返すのは理解できるのですが、 変数kを0から7まで繰り返して、* 2 ^ (7 - k)を足していく操作が理解できないのですが 何をやっているのでしょうか? また、式の中で「\」マークが出てきますがこれは何を意味しているのでしょうか? よろしくお願い致します。

Taruuuto
質問者

補足

自己解決しました。 ありがとうございました。  

すると、全ての回答が全文表示されます。

関連するQ&A