![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
VBAで配列からbmp画像を出力する方法を教えてください。
例えば、
dim a(255,255)
で作成した二次元配列があり、それぞれの中に0~255の数値が格納されているとします。
この画像からグレースケールあるいは任意の配色で
256x256の解像度のbmp画像を出力するプログラムを
VBAで作りたいのですがどのようにすれば良いですか?
検索して調べたのですが、
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr; …
http://akadamashy.blog68.fc2.com/blog-entry-915. …
のサイトにビットマップ画像を出力するための
プログラムが記載されていました。
しかしながら、どうしても配列からどうやって出力すれば良いか分かりません。
どなたか教えてください。
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
何もせず示したページもろくに読まないで質問ばかりするのはやめましょう。時間の無駄です。
ありがとうございます。
自分でいろいろと試してもう一歩のところなのですが、
.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配列に移す方法が異なるように思うのですが
どのようにすれば良いでしょうか?
恐らく、ここさえクリアできれば完成できると思います。
よろしくお願いいたします。
No.1
- 回答日時:
質問者さんが調べたと示された最初のサイトに、配列から出力するコードが最後に回答として出されてますが、それを参考にしてみてはいかがですか。
以下のサイトも参考にしてください。
BMP ファイルフォーマット
http://www.kk.iij4u.or.jp/~kondo/bmp/
上記のサイトの中で
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)を足していく操作が理解できないのですが
何をやっているのでしょうか?
また、式の中で「\」マークが出てきますがこれは何を意味しているのでしょうか?
よろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- その他(プログラミング・Web制作) プログラミングについて(Python) 添付した画像はC言語で簡単に作ったソースで、1つの配列に5つ 3 2022/09/10 19:15
- Excel(エクセル) 条件付き書式の色付きセルのカウント方法について 2 2022/10/21 14:51
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Visual Basic(VBA) VBAで特定の場所にあるCSVファイル(複数)から特定場所を抜き出してExcelに転記したいです。 11 2023/05/23 16:29
- Excel(エクセル) Excel 表の作成について 3 2022/06/16 12:15
- Visual Basic(VBA) ChatGPTに作らせたい Excel VBA 1 2023/04/05 19:56
- Excel(エクセル) エクセル VBA セルの結合 2 2022/09/07 11:48
- Excel(エクセル) excelで検索した商品の画像(ネットワーク上の)を表示させたい。 3 2023/06/28 00:32
- Java Java、配列の問題を教えて欲しいです。 ・日、月、火、水、木、金、土 ・各曜日の英語 を2次元配列 2 2023/07/10 19:14
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列を使わずに、変数名を動的...
-
配列で格納したものをmsgboxで...
-
C# Listを使わずに2次元配列の...
-
先頭アドレスとは何ですか?
-
配列の参照渡しで型が一致しま...
-
C言語で特定列だけを抽出して配...
-
C言語の配列番号が"0"から始ま...
-
C# 配列の変数宣言について。
-
プログラムが書けません。
-
VBで構造体の配列を関数に渡す...
-
【C言語】配列の中に配列を入れ...
-
テキストファイルから文字列を...
-
【速いブラインドタッチ】手を...
-
ポインタの配列のコンマについて
-
配列の中身を逆にするために。。。
-
unsigned char配列への入力の仕方
-
C言語の配列のサイズ
-
VBで動的なメモリの確保
-
c言語でのヒストグラム作成用の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列を使わずに、変数名を動的...
-
先頭アドレスとは何ですか?
-
配列で格納したものをmsgboxで...
-
C# 配列の変数宣言について。
-
テキストファイルから文字列を...
-
unsigned char配列への入力の仕方
-
ExcelVBAで質問です。離れた二...
-
配列の参照渡しで型が一致しま...
-
パイソンの
-
C# Listを使わずに2次元配列の...
-
C言語で特定列だけを抽出して配...
-
複数の選択範囲の行番号を個別...
-
【C言語】配列の中に配列を入れ...
-
メモリの初期値
-
VBで構造体の配列を関数に渡す...
-
Excel、VBAのユーザーフォーム...
-
配列をEraseしてもメモリが開放...
-
2次元配列を戻り値とする関数?
-
【速いブラインドタッチ】手を...
おすすめ情報