• 締切済み

画像ファイルを2進数で表したい(C#)

PGMでもBMPでもどの画像形式でもかまわないのですが、 画像を2進数で表したいです。 画像は、白と黒のみを使います。 □□□■■□□□ □□■□□■□□ □□■□□■□□ □□■■■■□□ □□■□□■□□ □□■□□■□□ こういう画像データを読み込んだ場合、 00011000 00100100 00100100 00111100 00100100 00100100 このように表示するプログラムを組みたいと考えています。 画像データを文字に変換する方法が良く分かりません。 初心者向けに、教えていただけると有難いです。 回答よろしくお願いします。

みんなの回答

  • k_kota
  • ベストアンサー率19% (434/2186)
回答No.3

あなたが分からないのはバイナリデータの読み込みと、画像データの画素値を処理するところです。 画像データを文字に変換するのも出来ないでしょうけど、データを読む所は出来るのですか? やり方ですが、 ・ファイルを開く ・ファイルからヘッダ分のデータを読む ・読んだヘッダから各画素各色のデータを格納する行列を準備 ・行列に画素値を格納する ・画素値に応じてお好きなように出力する 上記をやるにはBMPを対象にするのが良いでしょう。 出来合いのものもあると思いますが、自分で一個ずつ理解して組み合わせるべきです。 あなたが初心者であって、ものぐさで無いのであれば、上記を頑張ってやっていただければ良いと思います。 初心者を言い訳にしたものぐさであれば、親切な人を待てばよいでしょう。 考えた結果の追加質問であれば答えます。

  • chie65535
  • ベストアンサー率43% (8526/19383)
回答No.2

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の倍数じゃない時は工夫が必要。

  • chie65535
  • ベストアンサー率43% (8526/19383)
回答No.1

//バイト単位のバイナリデータを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'); } }

関連するQ&A

  • C#で画像を2値化?したい!

    bmpなどの画像データを2値化(0か1の値)にしたいです。 画像は白か黒の2色に設定しておき、 それをC#等で読み込み、2値化し、出力したいのです。 今まで方法がわからず、画像データを見ながら0や1を手入力でしてきたのですが、 量が膨大になってきたので追いつかなくなり、プログラムを組もうと考えました。 色々サイトも見てみたのですが、 方法がよく分かりませんでした。 良いサイト、もしくはプログラムを教えていただけるとうれしいです。 よろしくお願い致します。

  • C言語での画像処理:jpeg→pgmへ

    Linux(Fedora core 4)を使っております。 今回C言語で画像処理を行いたいと考え、画像の形式がpgm形式としてのプログラムを組みました。 このプログラムを、実際にデジカメでとった写真について使いたいのですが、デジカメで撮った写真はjpeg形式の為、これをpgm形式に変換したいのですが、これはプログラムを作って行うことはできるのでしょうか。もしくはツールが必要なのでしょうか。ちなみに当方プログラミング初心者でございます。 よろしくお願い致します。

  • 画像ファイルの形式が・・・

    パソコン初心者です 何をどのようにしたかぜんぜん分からないのですが 画像を整理しようとして画面にでていた何か(?)をクリックしたらBMP形式の画像がすべてEMF形式にかわってしまいました とりあえず、インストールしていた画像ソフトを使って、変わってしまったすべての画像をの形式を一つづつBMP形式に変換して直しましたが 何かの操作で一度に変わってしまったのなら一度にもとの形にも直せるのでは??と思いつつ皆目わかりません 原因も対処の仕方も何もかもわからないのでアドバイスをください

  • bmp画像ファイルから最も多く使われている色

    bmp画像ファイルから最も多く使われている色を選ぶ方法を探しています。 比較的色の数が少ないbmp形式の画像ファイルから最も多く使われている色を選びたいのですが なにかいい方法やフリーのソフトなどを知っていたら教えていただきたいです。

  • ブログに画像を、載せたいのですが・・・

    パソコン初心者です。ブログに画像を、載せたいのですが、顔の部分に、ペインティングで、黒く塗りつぶしても、剥ぎ取られて、顔の部分がわかると、聞いたのですが、本当でしょうか?もし、そうだとしたら、良い方法を、教えて下さい。ちなみに、ヤフーブログです。 と、質問したら、ペイントなどを使い、一度bmpなど、サムネイルを含まない形式に保存してから再度jpg変換すると不要なものが見える心配はありません。という、回答を、頂いたのですが、 ペイントなどを使い、一度bmpなど、サムネイルを含まない形式に保存してから再度jpg変換する方法を、教えて下さい。 宜しくお願いいたします。

  • PGM形式の画像。。。

    LinuxでC言語を用いて画像処理を行いました。(pgm形式です) 新しく作ったpgm形式の画像をwindowsで開こうとしたら開けなくて困っています><!!! どなたかLinuxで作ったpgm形式の画像をwindowsで開く方法をご存知の方がいらっしゃいましたらよろしくご教授願います。

  • 【画像の挿入について】

    AutoCADのソフトを使用していますが、ビットマップの画像を挿入すると、あるパソコンでは画像の下に●●●.bmpと挿入され、あるパソコンではちゃんと画像だけ挿入されます。 違いは、文字が入力されてしまう方は形式がパッケージと表示されて、画像のみの方はbmpと表示されています。 どうすればbmp形式で表示する事が出来るのか教えてください。 (どこで設定すればいいかできれば詳しくお願いします。) 宜しくお願い致します。

  • C言語でBMP画像(ファイル)は作れますか?(Unix使用)

    こんにちは。私は30代男性です。 先日はBMPを読み込んでUnix上でイメージ表示するプログラムを作ろうとしていましたが、ようやく完成しました。ご協力いただいた方々にお礼申し上げます。 次にチャレンジしようとしていることは、「BMPファイルに画像を書き出す。」というものです。画像は横4ピクセル・高さ256ピクセルのサイズで、とりあえず1行ずつRBG値を増やして「色の作成」の時に出てくるような長方形型の色指定用のグラデーション表示をしてみようかなと思っています。 →つまり、色の変化はRBG(0,0,0,)からRBG(255,255,255)にずらしていくという感じです(黒→灰色→白とでもいいましょうか)。 これはパレットに設定する値をfor分でループさせればいいかなと思いましたが、プログラムでBMP画像を作り出すことは無理なんでしょうか?ファイルがない状態からファイル名を指定して作るとしたら、offset値をどのように設定したらいいのかなど、わからないことだらけです。 アドバイスを頂けたらありがたいです。どうぞ宜しくお願い致します。

  • C言語でBMPファイルの内容を表示 その2(Unix使用)

    こんにちは。私は30代の男性です。 以前、コマンドラインで指定したBMPファイルの中身をバイナリ形式で読み込むということにチャレンジして、とりあえずBITMAPFILEHEADER構造体の中の情報を引き出すことには成功しました。 ※以前の質問とご回答 → http://okwave.jp/qa2837931.html fread関数を使ってoffsetという情報(ファイル先頭から画像データまでのバイト数)を取り出すことができたので、あとはBMPファイルの先頭アドレスからoffsetのバイト数分だけ進んだ箇所からデータを取り出して出力すれば、数値として格納されている画像データが引き出せると思ったのですが、うまくいきません。 どのようにアドレスを指定すれば、バイナリ形式の画像データを表示できるのでしょうか?宜しくお願い致します。

  • c言語による画像処理について

    いつもお世話になってます。 c言語を使った画像処理を学び始めました。 入力画像の白(RGB値255,255,255)以外の画像を黒(RGB値0,0,0) に変換するプログラムを作成したいと思っているのですが、 入力画像の大きさによっては正常に命令を実行してくれないことがあるので、 改善点をご教示いただきたいと考え投稿させていただきました。ソースプログラムは #include<stdio.h> #define nx 100 //画像の幅 #define ny 100 //画像の高さ int main(void) { FILE *fp,*fp2; int i,j; unsigned char header[54]; unsigned char screen[nx][ny][3]; /* ファイルから読む */ fp=fopen("input.bmp","rb"); //ビットマップ形式 ,24ビットカラー fread(header,1,54,fp); // ヘッダ(54バイト)を飛ばす */ fread(screen,1,nx*ny*3,fp); // 残りはデータ(最下行から順に入る) //(255,255,255)以外なら黒(0,0,0)に for(j=0;j<ny;j++) for(i=0;i<nx;i++) if(screen[j][i][0]!=255||screen[j][i][1]!=255||screen[j][i][2]!=255){ screen[j][i][0]=0; screen[j][i][1]=0; screen[j][i][2]=0; } fclose(fp); /* ファイルに書く */ fp=fopen("output.bmp","wb"); fwrite(header,1,54,fp); /* ヘッダ */ fwrite(screen,1,nx*ny*3,fp); /* データ */ fclose(fp); return 0; } となっています。ここで、画像の高さ、幅を100以下にすると正常に変換できなくなります。 どなたか原因がお分かりでしたらお知らせ願えないでしょうか?