• ベストアンサー

C言語でbmpファイルの中身を表示(Unix使用)

こんにちは。私は30代の男性です。 C言語でビットマップ形式で保存された白黒の画像を、Unix上で白の全角スペースなどを使って表示させるにはどのようにしたらよろしいでしょうか? 例えばbmpファイルの画像が下図のように数字の「1」を表すものなら、それをUnix上で白の全角スペースで表すといった感じにです。  ■ ■■  ■  ■  ■ ■■■ 画像ファイルを扱うということ自体が初めてですので、参考になるテキストやサイトなどもお教え頂けるとありがたいです。 どうぞ宜しくお願い致します。

  • DT50
  • お礼率95% (504/530)

質問者が選んだベストアンサー

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.3

★サイトを紹介します。 ・http://www.sm.rim.or.jp/~shishido/readbmp.html→『BMPファイルからDIBを読み込む』 ・http://www.sm.rim.or.jp/~shishido/dib256.html→『256色DIB』 ・http://www.sm.rim.or.jp/~shishido/dib2.html→『DIB操作関数を作る』 ※上記のリンクは全て同じサイト内のページです。 ★本を紹介します。 ・『ゲームプログラミング練習帳』という本を紹介します。→http://www.amazon.co.jp/gp/product/4875934424 ・『ゲームプログラミング練習帳』の第1章に描画・保存・読み込みの基本が載っています。 ・買う場合は税込みで 1995 円です。→上記のサイトが『本』の著者のホームページです。 関連ヘッダ: ・BITMAPFILEHEADER ・BITMAPINFO ・RGBQUAD ・上記で紹介しているのは、すべて Windows 環境を対象にしています。 ・ヘッダファイルなどは、自作して白黒(2色?)のビットマップのベタデータを  読み込んで処理して下さい。→読み込めないと処理できませんので、『BMP』  のファイル構造を最初に理解して下さい。 ・以上。おわり。→構造体をキーワードに検索するとたくさん情報が出ますよ。

参考URL:
http://oshiete1.goo.ne.jp/qa2659364.html
DT50
質問者

お礼

Oh-Orange様 いつもお世話になっております。ご回答ありがとうございます。上記サイト、参考になります。本についても余力があれば購入したいと思います。どうもありがとうございました。

その他の回答 (2)

  • ptakeda
  • ベストアンサー率53% (7/13)
回答No.2

この白黒の画像を保存するプログラムは、 自分で作られたものなのでしょうか? もしくは、そのプログラムのソースは見れるのですか? ソースが見れるのであれば中のデータがどのようになっている かわかると思うので、データ部分を読み出して、 1ならば■、0ならば_を表示して、 横のビット数で折り返していけば期待通りのことができると思います。 もし、ソースがないのであった、以下の条件なら、 一般的にビットマップ、bmpファイルというのであれば、 ほとんどの場合「Windows bitmap」だと思います。 10~13バイト目を読み込んでそこからが、 データなので、それで並べてみてください。 18~19バイト目:横のピクセル数 20~21バイト目:縦のピクセル数 になるので、後は同じです。 白黒じゃなかった場合は少し難しいですが、何とかなると思います。 「Windows bitmap」じゃなかったり、無圧縮でなかったりした場合は、 私にはわかりません。

参考URL:
http://ja.wikipedia.org/wiki/Windows%E3%83%93%E3%83%83%E3%83%88%E3%83%9E%E3%83%83%E3%83%97
DT50
質問者

お礼

ご回答ありがとうございます。 バイトに入っている情報、参考にさせて頂きます。ありがとうございました。

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.1

http://ja.wikipedia.org/wiki/Windows_bitmap bmpを独自に読んで独自に表示するプログラムを自分で書くのは、ハッキリ言って「無謀」です。 ヘッダ情報で圧縮か無圧縮か、ピクセルの色数が幾つか、パレットがあるかないか、あるとしたらサイズは幾つか、とか、かなり複雑です。 bmpファイルを読み込んで、ファイルヘッダ情報に従って、イメージ情報をメモリ(画像用バッファ)に展開してくれるunixのC言語ライブラリルーチンとかがネット上に転がってると思うので、それを探して来て使って下さい。 「メモリ(画像用バッファ)に展開されたデータを参照して、白の全角スペースを書くか書かないか」ってプログラムなら、そんなに悩まない筈ですし。

DT50
質問者

お礼

ご回答ありがとうございました。

関連するQ&A

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

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

  • bmpファイルが開きません。

    ウェブサイトからの画像などは(ビットマップ)Adobeで 開くのですが、友人からHotmailへ送ってもらった ビットマップ イメージ画像が開きません。 ‐‐‐ ファイル形式用プラグインはファイルを 解析することができません。 従って、「◯◯◯◯.bmp」を 開く事ができませんでした。 ‐‐‐‐ このように表示されます。 宜しくお願いします。(;^_^A

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

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

  • c言語を使いダイアログにbmpを表示したい 

    はじめまして、 私は、c言語は初心者なのでが、ダイアログボックスに、画像(bmp)が表示することができません。 ソースは、 hdc = BeginPaint(hDlg, &ps); //指定ウィンドウ内での描写準備 // ビットマップをファイルからロードする hBitmap = ::LoadBitmap( NULL, _T("test.bmp") ); // ウィンドウのデバイスコンテキストハンドルを取得する hDC = GetDC( hDlg ); // メモリデバイスコンテキストを作成する hCompatDC = CreateCompatibleDC( hDC ); // ロードしたビットマップを選択する GetObject(hBitmap, sizeof(BITMAP), &bmp); // ビットマップをウィンドウに転送する(表示する) if(hBitmap != NULL){ StretchBlt( hDC, 0, 0, 100, 100, hCompatDC, 0, 0, bmp.bmWidth, bmp.bmHeight, SRCCOPY ); SendDlgItemMessage( hDlg, IDC_STATIC, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hBitmap); } なのですが、これはメインウィンドウでは動くのですが、ダイアログボックスでは動かずこまっています。 どうか、助言のほどよろしくお願いします。

  • excel に bmpファイルを貼り付け

    excelファイルにbmpを貼り付けようと思っているのですが、 1bmpファイルが大き過ぎて困っています  どのようにすると小さくなるのでしょうか? bmpファイルは ペイントを用いて ファイルの種類:24ビット ビットマップ(*.bmp;*.dib) にて保存したものです

  • bmpファイルの明暗について

    **.bmp のファイル(白黒)があります この画像の明暗を 1pixel 単位で数値化したいのです  例えば 真っ白 = 0 真っ黒 = 255 また、そのデータを csv ファイル等に保存したいのですが 可能でしょうか? 宜しくお願いいたします

  • C言語でBMPの迷路を解く。

    こんにちは。私は30代の男性です。 先日はCSVファイルの読み取りについて投稿しましたが、無事解決できました。アドバイスを下さった方々にはお礼申し上げます。 次は、「BMPファイルで書かれた迷路を解く」というようなことを試みています。下がイメージ図になりますが、「□は白」で「■は黒」で「※(ゴール)は青」とします。■が道で■しか進めず、他の道とは交差しない一本道であるとします。表記の都合上、下記だとスペースがありますが、実際はもちろん■は繋がっていますし「□」は白なので、実際は何もみえません。 0 x→ y■□□□□□□□□□□□□ ↓■□□□□□□□□□□□□  ■□□□※■■□□□□□□  ■□□□□□■□□□□□□  ■□■■■■■□□□□□□  ■□■□□□□□□□□□□  ■■■□□□□□□□□□□ 下記のような図を一つ一つ進みながら、左上の座標をx,y=(0,0)として一つ一つ座標を表示しながら進み、「※(青)」で「ゴール」と表示するには、どのようにしたらよいでしょうか? BMPの画像は、交差しない一本道の画像ならどのような画像でも対応できるようにしたいのですが、上下左右どのような動きもしなくてはならないので、どのような条件でどのようにコーディングしたらいいのかわからず悩んでいます。 どなたかよきアドバイスをお願い致します。

  • フォトショップでBMPファイルが開けない

    現在Phtoshop6.0を使っています。(WindowsXP) 主に、フリーソフトでキャプチャした画像を編集するのに使っています。 先日までjpegで保存していたのですが、新たにbmpで保存した画像の編集にもチャレンジしようと思い始めました。 ところが、bmpで保存した画像を開こうとすると 「<ファイル名>を開くことができません。ファイル形式モジュールでファイルの解析を実行できません。」 と出て開く事ができません。 何故なのでしょうか? 分かる方、教えて下さい。お願いします。

  • 画像(bmp等)の保存形式について

    画像(bmp等)の保存形式について 画像の保存のフォーマットについて質問です。 bmpの形式についてのwebページをみてみたんですが、 structを書いてメンバをかいていたりするんですが、 bmpのファイルをテキストエディタでみてみてもうまくみれないし、 やっぱりバイナリエディタでみると数字の羅列なんですが、 実際に作る場合にはstructとかを書いた後に使うコンパイラみたいなものがあるんでしょうか? struct等C言語のプログラミングの知識はあります。 よろしくお願いします。

  • JPEG・BMPファイル

    JPEG・BMPファイルを形式をかえられますか? JPEG→BMP BMP→JPEG ダウンロードなど一回保存したからの変更。

専門家に質問してみよう