スポンサーリンク
この広告は一定期間(1ヶ月以上)更新のないブログに表示されます。
ブログ記事の情報が古い場合がありますのでご注意下さい。
(ブログオーナーが新しい記事を投稿すると非表示になります。)
ブログ記事の情報が古い場合がありますのでご注意下さい。
(ブログオーナーが新しい記事を投稿すると非表示になります。)
2011年11月08日
これ何だ?プログラム編
またまた備忘録となります。
いよいよ最終回です。ご興味があれば、どうぞ。
シリーズになってます。
ここから先は、以前の記事もご覧にならないと
何やってんの?
が伝わらないと思います。
「これ何だ?正解は・・・」
エクセルのセルに色を付けて、
画像を表現することに挑戦してます。
「これ何だ?の種明し」
一つ一つ手作業でセルに色は付けられないので、
VBA(プログラム)で処理します。
「ビットマップ画像の仕組み」
画像の点1px分のデータを取り出すために、
ピットマップファイルの仕組みをしらべました。
「ビットマップ画像の仕組み2」
ビットマップファイルと4の倍数について調べました。
の続きです。
画像を読込み、1ピクセルをセル一つに割り当てて、
エクセルのセルで画像を再現する事をVBA(プログラム)でやってます。
今回、
最終回は、プログラムの中身についてMEMOしておきます。
これです。

データの中身が確認できるように、データーチェック部分で、
内容をエクセルのB列に書き出しています。

ここで、問題になっていた
画像サイズに制限がある理由についてですが、
今さらですけど、
サイズの大きい画像でエラーが起こるのは、
このデータチェック部分のせいのような気がしてきました。
データーチェック部分のループ i が、
整数のため、32767までしかカウントできないためではないか?
と記事を書きながら、思いました。
続きは、次回にしようと思いましたが、シリーズが長くなっているので、
このまま続けます。
急遽、実験してみます。
データチェック部分を無効にして実行してみます。
横幅240px 高さ180px
240 × 180 × 3 + 54 + 2 = 129656バイトのファイルです。

なんと!できました。
バグったかと思うほど、3分くらい?処理に時間がかかりました。
通常の100%表示にするとこんな感じです。

セル一つ一つに色が付いているのが確認できます。
詳しい原因は、あくまで推測ですが、
データーのチェックと確認の為、作成した部分で、
不具合を起こしていました。
ちょっとショックでしたが、ギリギリで気付いてよかったです。
< 追記 >
エクセルの行列の上限や、ループ変数 L Cの上限をクリア
しているわけではありません。
エラー処理は行っていないので、エクセルの列数、処理時間も考えて
240px × 180pxくらいが、限界と思っています。
いつもの事ですが、
内容に誤りがあっても責任は負えません。
長かったシリーズも、これで完結です。
何かの役に立つとは思いませんが、やってみたかった事なので、
書き留めて置くことにしました。
おまけ 続きを読む
いよいよ最終回です。ご興味があれば、どうぞ。
シリーズになってます。
ここから先は、以前の記事もご覧にならないと
何やってんの?
が伝わらないと思います。
「これ何だ?正解は・・・」
エクセルのセルに色を付けて、
画像を表現することに挑戦してます。
「これ何だ?の種明し」
一つ一つ手作業でセルに色は付けられないので、
VBA(プログラム)で処理します。
「ビットマップ画像の仕組み」
画像の点1px分のデータを取り出すために、
ピットマップファイルの仕組みをしらべました。
「ビットマップ画像の仕組み2」
ビットマップファイルと4の倍数について調べました。
の続きです。
画像を読込み、1ピクセルをセル一つに割り当てて、
エクセルのセルで画像を再現する事をVBA(プログラム)でやってます。
今回、
最終回は、プログラムの中身についてMEMOしておきます。
これです。

データの中身が確認できるように、データーチェック部分で、
内容をエクセルのB列に書き出しています。

ここで、問題になっていた
画像サイズに制限がある理由についてですが、
今さらですけど、
サイズの大きい画像でエラーが起こるのは、
このデータチェック部分のせいのような気がしてきました。
データーチェック部分のループ i が、
整数のため、32767までしかカウントできないためではないか?
と記事を書きながら、思いました。
続きは、次回にしようと思いましたが、シリーズが長くなっているので、
このまま続けます。
急遽、実験してみます。
データチェック部分を無効にして実行してみます。
横幅240px 高さ180px
240 × 180 × 3 + 54 + 2 = 129656バイトのファイルです。

なんと!できました。
バグったかと思うほど、3分くらい?処理に時間がかかりました。
通常の100%表示にするとこんな感じです。

セル一つ一つに色が付いているのが確認できます。
詳しい原因は、あくまで推測ですが、
データーのチェックと確認の為、作成した部分で、
不具合を起こしていました。
ちょっとショックでしたが、ギリギリで気付いてよかったです。
< 追記 >
エクセルの行列の上限や、ループ変数 L Cの上限をクリア
しているわけではありません。
エラー処理は行っていないので、エクセルの列数、処理時間も考えて
240px × 180pxくらいが、限界と思っています。
いつもの事ですが、
内容に誤りがあっても責任は負えません。
長かったシリーズも、これで完結です。
何かの役に立つとは思いませんが、やってみたかった事なので、
書き留めて置くことにしました。
おまけ 続きを読む
2011年11月05日
ビットマップ画像の仕組み2
またまた備忘録となります。
今回も、こっそりアップです。ご興味があれば、どうぞ。
「これ何だ?正解は・・・」
「これ何だ?の種明し」
「ビットマップ画像の仕組み」
の続きです。
ここから先は、以前の記事もご覧にならないと
何やってんの?
が伝わらないかもしれません。
ビットマップ画像をエクセルのセルで、再現することに挑戦してます。
画像を4の整数倍で、トリミングしなければならない理由を
明らかにしてみたいと思います。
横8px 縦8pxの画像の仕組みは、
前回の記事で、なんとなく分かりました。
画像データの中身(バイナリデータ)を1バイトづつ書き出しました。

ここまでが、前回の内容。
横6px 縦8pxの画像がどうなっているか
前回と同じように、画像ファイルを1バイトづつ調べていきます。
エクセルのセルへ、1バイトづつ書き出しました。

◆ヘッダ部分
ファイルサイズ
◆情報ヘッダ部分
横幅 6
高さ 8
◆画像データ領域
6px × 3バイト = 18バイト
横幅を4の倍数バイトにするため、
端数2バイト分0を記録してあることが分かります。
さらに、ファイル全体が4の倍数バイトになるように、
ファイルの最後に、2バイト分0を記録してあることも
わかります。
いろいろ調べた結果、自分なりの解釈です。
なんか少し納得できました。
この端数が分からなくて、苦労しました。
ちなみに、横幅6pxの画像を、
今回のプログラムで実行すると
こうなります?(笑)

プログラミング技術で、この端数分を飛ばして、
読み込むプログラムを作ればいいのですが、
横幅を4の整数倍で、画像をトリミングする技術(笑)で、
対応しました。
次回は、プログラム部分の予定。
今回も、こっそりアップです。ご興味があれば、どうぞ。
「これ何だ?正解は・・・」
「これ何だ?の種明し」
「ビットマップ画像の仕組み」
の続きです。
ここから先は、以前の記事もご覧にならないと
何やってんの?
が伝わらないかもしれません。
ビットマップ画像をエクセルのセルで、再現することに挑戦してます。
画像を4の整数倍で、トリミングしなければならない理由を
明らかにしてみたいと思います。
横8px 縦8pxの画像の仕組みは、
前回の記事で、なんとなく分かりました。
画像データの中身(バイナリデータ)を1バイトづつ書き出しました。

ここまでが、前回の内容。
横6px 縦8pxの画像がどうなっているか
前回と同じように、画像ファイルを1バイトづつ調べていきます。
エクセルのセルへ、1バイトづつ書き出しました。

◆ヘッダ部分
ファイルサイズ
◆情報ヘッダ部分
横幅 6
高さ 8
◆画像データ領域
6px × 3バイト = 18バイト
横幅を4の倍数バイトにするため、
端数2バイト分0を記録してあることが分かります。
さらに、ファイル全体が4の倍数バイトになるように、
ファイルの最後に、2バイト分0を記録してあることも
わかります。
いろいろ調べた結果、自分なりの解釈です。
なんか少し納得できました。
この端数が分からなくて、苦労しました。
ちなみに、横幅6pxの画像を、
今回のプログラムで実行すると
こうなります?(笑)

プログラミング技術で、この端数分を飛ばして、
読み込むプログラムを作ればいいのですが、
横幅を4の整数倍で、画像をトリミングする技術(笑)で、
対応しました。
次回は、プログラム部分の予定。
2011年11月04日
ビットマップ画像の仕組み
またまた備忘録となりますので、こっそりアップします。
ご興味があれば、どうぞ。
「これ何だ?正解は・・・」
「これ何だ?の種明し」
の続きです。
ここから先は、以前の記事もご覧になったほうが
何やってんの?
が伝わるかもしれません。
ビットマップ画像のフォーマット(中身を調べます)
縦8px 横8pxの小さな画像を調べてみます。
画像を読み取り、エクセルのセルで画像を再現します。
今回のプログラムを実行すると、こうなりました。

黄色い枠の中にあるのが、元画像です。(小さい)
プロパティでファイルサイズは248バイトでした。
仕組みを理解するために、画像からバイナリファイルを
1バイトづつエクセルのセルに書き出してみます。
バイナリファイルを分かりやすく、順番に区切ってみました。
画像ファイルの中身です。(画像クリックで拡大)

知りたい情報部分は黄色にしてあります。
上から
1.ヘッダ部分 ファイルサイズなど
2.情報ヘッダ 横幅 高さなど
3・画像データ領域 RGBの画像データ
となっています。
図の画像データ領域には、3バイトごとにRGBの色をつけています。
◆ヘッダ部分(14バイト)
ファイルサイズ
(248 プロパティと同じになってます)
データオフセット
(データ領域までのバイト数)
◆情報ヘッダ
(40バイト)
横幅
(画像の横幅px)
高さ
(画像の高さpx)
ビット数
(1ピクセルのビット数 RGBの3バイト×8)
データサイズ
(縦8×横8×3バイト=192バイト+2バイト)
◆画像データ領域
(左下角より右へ、以後1段づつ上がっていく
カラーはRGBではなく、BGRの順になっている)
注意&補足
※画像は、左下から右上へ記録されているので、
そのまま読み取ると元画像が上下逆になる。(二つ目の図の通り)
※最後の+2バイトは、ファイル全体のサイズを
4の整数倍バイトにするための端数で、0が入っている。
※画像横幅も4の整数倍バイトに揃える必要があるらしい。
この画像の場合、横8×3バイト=24バイトとなり、
4で割り切れる。
元画像の横幅を4の整数倍でトリミングする理由が、
ここにある。
本来プログラミングの技術で処理する部分を、
画像を4の倍数でトリミングする技術?
で回避しました。
まとめ
ヘッダ 14バイト
情報ヘッダ 40バイト
画像データ 192バイト
(横8×縦8×RGB3バイト)
端数 2バイト(ファイル全体を4の整数倍にする調整)
合計 248バイト
一応、ファイルサイズとピッタリ計算出来ました。
コンピューターのファイルは、0と1で記録されていることが
今回、なんとなく見えた気がしました。
これは、あくまで備忘録であり、
自分なりの解釈です。
当ブログの内容について責任は負えません。
次回もビットマップ画像について備忘録です
画像を4の倍数で、トリミングしなければならない理由を調べます。
続く
ご興味があれば、どうぞ。
「これ何だ?正解は・・・」
「これ何だ?の種明し」
の続きです。
ここから先は、以前の記事もご覧になったほうが
何やってんの?
が伝わるかもしれません。
ビットマップ画像のフォーマット(中身を調べます)
縦8px 横8pxの小さな画像を調べてみます。
画像を読み取り、エクセルのセルで画像を再現します。
今回のプログラムを実行すると、こうなりました。

黄色い枠の中にあるのが、元画像です。(小さい)
プロパティでファイルサイズは248バイトでした。
仕組みを理解するために、画像からバイナリファイルを
1バイトづつエクセルのセルに書き出してみます。
バイナリファイルを分かりやすく、順番に区切ってみました。
画像ファイルの中身です。(画像クリックで拡大)

知りたい情報部分は黄色にしてあります。
上から
1.ヘッダ部分 ファイルサイズなど
2.情報ヘッダ 横幅 高さなど
3・画像データ領域 RGBの画像データ
となっています。
図の画像データ領域には、3バイトごとにRGBの色をつけています。
◆ヘッダ部分(14バイト)
ファイルサイズ
(248 プロパティと同じになってます)
データオフセット
(データ領域までのバイト数)
◆情報ヘッダ
(40バイト)
横幅
(画像の横幅px)
高さ
(画像の高さpx)
ビット数
(1ピクセルのビット数 RGBの3バイト×8)
データサイズ
(縦8×横8×3バイト=192バイト+2バイト)
◆画像データ領域
(左下角より右へ、以後1段づつ上がっていく
カラーはRGBではなく、BGRの順になっている)
注意&補足
※画像は、左下から右上へ記録されているので、
そのまま読み取ると元画像が上下逆になる。(二つ目の図の通り)
※最後の+2バイトは、ファイル全体のサイズを
4の整数倍バイトにするための端数で、0が入っている。
※画像横幅も4の整数倍バイトに揃える必要があるらしい。
この画像の場合、横8×3バイト=24バイトとなり、
4で割り切れる。
元画像の横幅を4の整数倍でトリミングする理由が、
ここにある。
本来プログラミングの技術で処理する部分を、
画像を4の倍数でトリミングする技術?
で回避しました。
まとめ
ヘッダ 14バイト
情報ヘッダ 40バイト
画像データ 192バイト
(横8×縦8×RGB3バイト)
端数 2バイト(ファイル全体を4の整数倍にする調整)
合計 248バイト
一応、ファイルサイズとピッタリ計算出来ました。
コンピューターのファイルは、0と1で記録されていることが
今回、なんとなく見えた気がしました。
これは、あくまで備忘録であり、
自分なりの解釈です。
当ブログの内容について責任は負えません。
次回もビットマップ画像について備忘録です
画像を4の倍数で、トリミングしなければならない理由を調べます。
続く
2011年11月02日
これ何だ?の種明し
これ何だ?の種明し
前回の「これ何だ?正解は・・・」の続きです。
前回は、
エクセルのセルを正方形にして、一つ一つのセルに
色をつけて、画像を作りました。

100列×100行の10,000個のセルに
色を付けてあります。

ご覧の通り、
大変地味な作業をがんばりました。
なんて、そんな訳ないです。
では、やり方です。
まず、元になる画像(BMP)を用意し
その画像のバイナリデータから
ピクセルごとのRGBカラーをマクロで読み取り、
同じように、セルに色を付ける。完成!!
数秒で終わります。
もう少し詳しく。
ここからは、備忘録です。
元になる画像(BMP)は、
Windowsのビットマップファイルで用意する。

画像は拡大すると、点の集まりで出来ています。
画像ファイルに記録されている中味(バイナリデータ)を
1バイトづつ読み取り、画像の一つの点が何色なのか調べます。
その色で、エクセルのセル一つ一つを
同じように順番に塗りつぶしていきます。
これをVBA(マクロ)でやってます。
但し、
今回のプログラムは、都合(スキル不足)により、
いろいろ条件があります。
元画像について
Windowsの24ビット ビットマップファイルであること
ファイルサイズが、32768バイトを越えないこと
画像の横幅(ピクセル)が、4の倍数であること
横100px 縦100px
横120px 縦 80px
などにトリミングしておく
正方形なら104px × 104pxが限界
縦横の積が10000程度になるように 理由は後日
MEMO
1バイト=8ビット
00000000~11111111 2進数の8桁
2の8乗
10進数では、0~255までの
256通りの情報です。
RGBとは
R=赤(red)
G=緑(green)
B=青(blue)
一つの点(ピクセル)はRGBの強さ(濃さ)で表現
Rの強さを0~255段階(1バイト)
Gの強さを0~255段階(1バイト)
Bの強さを0~255段階(1バイト)
RGB 0,0,255は 青になる。
合計3バイトで、一つの点の色が決まる。
いつものことながら、自分なりの解釈の備忘録ですので、
あしからず。
次回は、ビットマップ画像の仕組み
前回の「これ何だ?正解は・・・」の続きです。
前回は、
エクセルのセルを正方形にして、一つ一つのセルに
色をつけて、画像を作りました。

100列×100行の10,000個のセルに
色を付けてあります。

ご覧の通り、
大変地味な作業をがんばりました。
なんて、そんな訳ないです。
では、やり方です。
まず、元になる画像(BMP)を用意し
その画像のバイナリデータから
ピクセルごとのRGBカラーをマクロで読み取り、
同じように、セルに色を付ける。完成!!
数秒で終わります。
もう少し詳しく。
ここからは、備忘録です。
元になる画像(BMP)は、
Windowsのビットマップファイルで用意する。

画像は拡大すると、点の集まりで出来ています。
画像ファイルに記録されている中味(バイナリデータ)を
1バイトづつ読み取り、画像の一つの点が何色なのか調べます。
その色で、エクセルのセル一つ一つを
同じように順番に塗りつぶしていきます。
これをVBA(マクロ)でやってます。
但し、
今回のプログラムは、都合(スキル不足)により、
いろいろ条件があります。
元画像について
Windowsの24ビット ビットマップファイルであること
ファイルサイズが、32768バイトを越えないこと
画像の横幅(ピクセル)が、4の倍数であること
横100px 縦100px
横120px 縦 80px
などにトリミングしておく
正方形なら104px × 104pxが限界
縦横の積が10000程度になるように 理由は後日
MEMO
1バイト=8ビット
00000000~11111111 2進数の8桁
2の8乗
10進数では、0~255までの
256通りの情報です。
RGBとは
R=赤(red)
G=緑(green)
B=青(blue)
一つの点(ピクセル)はRGBの強さ(濃さ)で表現
Rの強さを0~255段階(1バイト)
Gの強さを0~255段階(1バイト)
Bの強さを0~255段階(1バイト)
RGB 0,0,255は 青になる。
合計3バイトで、一つの点の色が決まる。
いつものことながら、自分なりの解釈の備忘録ですので、
あしからず。
次回は、ビットマップ画像の仕組み
2011年11月01日
これ何だ? 正解は・・・
EXCEL劇場です。
さて、突然ですが、これはEXCELの画面です。
何だと思います?

灰色の濃淡で、
セルの一つ一つに、色が付いています。
あまりきれいじゃないです。
何でしょう。
・
・
・
エクセルの
画面表示を55%にしてみます。

なんとなく形がでてきた。
・
・
・
画面表示を25%にしてみます。

おーっ! これは、先日行ってきた古川町の瀬戸川
画面表示を10%にしてみます。

これだけ小さくすると、ギザギザが目立たなくなりました。
これは、最初の画像で分かるように、
正方形にしたセルに、一つ一つ色を付けてあるんです。
100列×100行のセルで出来ています。
100×100=10,000個のセルに色をつけました。
パソコンの画像が点の集まりで、出来ているのと同じ理由です。
ギザギザのないベジェ曲線で描いた
いつものEXCEL劇場とは、対照的なものとなりました。
くだらない事やってますが、
次回、もう少し詳しく説明したいと思います。
ベジェ曲線で描いた物は、過去の
EXCEL劇場にあります。
ポルシェ
高山城
エヴァ初号機
昭和なテレビ
ありがとうさぎ
など、
さて、突然ですが、これはEXCELの画面です。
何だと思います?

灰色の濃淡で、
セルの一つ一つに、色が付いています。
あまりきれいじゃないです。
何でしょう。
・
・
・
エクセルの
画面表示を55%にしてみます。

なんとなく形がでてきた。
・
・
・
画面表示を25%にしてみます。

おーっ! これは、先日行ってきた古川町の瀬戸川
画面表示を10%にしてみます。

これだけ小さくすると、ギザギザが目立たなくなりました。
これは、最初の画像で分かるように、
正方形にしたセルに、一つ一つ色を付けてあるんです。
100列×100行のセルで出来ています。
100×100=10,000個のセルに色をつけました。
パソコンの画像が点の集まりで、出来ているのと同じ理由です。
ギザギザのないベジェ曲線で描いた
いつものEXCEL劇場とは、対照的なものとなりました。
くだらない事やってますが、
次回、もう少し詳しく説明したいと思います。
ベジェ曲線で描いた物は、過去の
EXCEL劇場にあります。
ポルシェ
高山城
エヴァ初号機
昭和なテレビ
ありがとうさぎ
など、