
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も見ています
-
好きな人を振り向かせるためにしたこと
大好きな人と会話のきっかけを少しでも作りたい、意識してもらいたい…! 振り向かせるためにどんなことをしたことがありますか?
-
いちばん失敗した人決定戦
あなたの「告白」での大失敗を教えてください。
-
モテ期を経験した方いらっしゃいますか?
一生に一度はモテ期があるといいますが、みなさんどうですか? いまがそう! という方も、「思い返せばこの頃だったなぁ」という方も、よかったら教えて下さい。
-
洋服何着持ってますか?
洋服を減らそうと思っているのですが、何着くらいが相場なのかわかりません。
-
思い出すきっかけは 音楽?におい?景色?
記憶をふと思い出すきっかけは 音楽、におい、景色 どれですか?
-
VBA2005 16進を2桁で表示したい。
Visual Basic(VBA)
-
【エクセルのマクロ】クリップボードのbitmapをフォームに表示させたい
Visual Basic(VBA)
-
エクセルのシートに貼りつけたbmpをjpegに
その他(Microsoft Office)
-
-
4
【VBA】Excelの特定範囲のセルを画像で保存したい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 配列の長さの上限
-
C# 配列の変数宣言について。
-
ExcelVBAで質問です。離れた二...
-
C# Listを使わずに2次元配列の...
-
テキストファイルから文字列を...
-
VBでC言語のポインタみたい...
-
複数の選択範囲の行番号を個別...
-
VB.NET 構造体の配列の検索機能...
-
配列同士の文字列の比較
-
2次元配列を戻り値とする関数?
-
ポインタの配列のコンマについて
-
配列を使わずに、変数名を動的...
-
C言語で特定列だけを抽出して配...
-
unsigned char配列への入力の仕方
-
Functionの戻り値を2次元配列...
-
市販のビンゴカードについて
-
銀行ATMの数字キーの配列
-
VBで構造体の配列を関数に渡す...
-
C++ テンプレートを使った配列...
-
C言語の配列番号が"0"から始ま...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列を使わずに、変数名を動的...
-
配列で格納したものをmsgboxで...
-
テキストファイルから文字列を...
-
C# 配列の変数宣言について。
-
C# Listを使わずに2次元配列の...
-
先頭アドレスとは何ですか?
-
C言語で特定列だけを抽出して配...
-
【速いブラインドタッチ】手を...
-
配列の参照渡しで型が一致しま...
-
unsigned char配列への入力の仕方
-
ExcelVBAで質問です。離れた二...
-
VBで構造体の配列を関数に渡す...
-
複数の選択範囲の行番号を個別...
-
C++ vectorに配列をプッシュしたい
-
【C言語】配列の中に配列を入れ...
-
配列をEraseしてもメモリが開放...
-
Excel、VBAのユーザーフォーム...
-
Redimした動的配列はEraseする...
-
VB.NET 構造体の配列の検索機能...
おすすめ情報