- 締切済み
画像ファイルを2進数で表したい(C#)
PGMでもBMPでもどの画像形式でもかまわないのですが、 画像を2進数で表したいです。 画像は、白と黒のみを使います。 □□□■■□□□ □□■□□■□□ □□■□□■□□ □□■■■■□□ □□■□□■□□ □□■□□■□□ こういう画像データを読み込んだ場合、 00011000 00100100 00100100 00111100 00100100 00100100 このように表示するプログラムを組みたいと考えています。 画像データを文字に変換する方法が良く分かりません。 初心者向けに、教えていただけると有難いです。 回答よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- k_kota
- ベストアンサー率19% (434/2186)
あなたが分からないのはバイナリデータの読み込みと、画像データの画素値を処理するところです。 画像データを文字に変換するのも出来ないでしょうけど、データを読む所は出来るのですか? やり方ですが、 ・ファイルを開く ・ファイルからヘッダ分のデータを読む ・読んだヘッダから各画素各色のデータを格納する行列を準備 ・行列に画素値を格納する ・画素値に応じてお好きなように出力する 上記をやるにはBMPを対象にするのが良いでしょう。 出来合いのものもあると思いますが、自分で一個ずつ理解して組み合わせるべきです。 あなたが初心者であって、ものぐさで無いのであれば、上記を頑張ってやっていただければ良いと思います。 初心者を言い訳にしたものぐさであれば、親切な人を待てばよいでしょう。 考えた結果の追加質問であれば答えます。
- chie65536(@chie65535)
- ベストアンサー率44% (8755/19867)
8×8より大きい場合はこう。 #define XSZ 16 #define YSZ 16 #define BSZ 8 // 1バイトは8ビット #include <stdio.h> unsigned char data[32] = { 0x40,0x3c,0x27,0xc0,0x10,0x04,0x04,0x84, 0x82,0x48,0x42,0x40,0x20,0x1c,0x07,0xe0, 0x00,0x40,0x20,0x40,0x2f,0xfe,0x40,0x40, 0x40,0x40,0x80,0x40,0x87,0xfc,0x00,0x00 }; void main(void) { char c; int x,y,bit; for (y=0;y<YSZ;y++) { for (x=0;x<XSZ;x+=BSZ) { c = data[y*(XSZ/BSZ)+(x/BSZ)]; for (bit=0;bit<BSZ;bit++) { putchar('0' + (c < 0)); c <<= 1; } } putchar('\n'); } } 横のサイズが8の倍数じゃない時は工夫が必要。
- chie65536(@chie65535)
- ベストアンサー率44% (8755/19867)
//バイト単位のバイナリデータを2進表示する。 #include <stdio.h> //バイト単位のバイナリデータ8個。 unsigned char data[8] = { 0, 24, 36, 36, 60, 36, 36, 0 }; void main(void) { char c; int i,j; for (j=0;j<8;j++) { c = (char)data[j]; for (i=0;i<8;i++) { putchar('0' + (c < 0)); c <<= 1; } putchar('\n'); } }