• ベストアンサー

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

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

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

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

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

★表示するプログラムが完成したようですね。 ・『黒→灰色→白』という色のグラデーションを『グレイスケール』と呼びます。 ・プログラムでも BMP 画像ファイルを作り出すことは出来ます。  今回はパレットを使いますし、256 段の変化ですので 256 色のビットマップになります。  ヘッダ情報を順番に fwrite で出力して、パレットデータ(RGBQUAD×256個の配列)を出力します。  この後に画像データの下位ラインから順に横 4 ピクセル× 256 ラインを出力します。 ・なお、今回は 1 ピクセルは 1 バイトですので 4 ピクセル× 256 ライン=1024バイトが画像データの  サイズになりますね。→ヘッダ情報にもこの情報をセットします。 ・以上。おわり。→前回(下)の『参考URL』もどうぞ。

参考URL:
http://www5d.biglobe.ne.jp/~noocyte/Programming/Windows/BmpFileFormat.html
DT50
質問者

お礼

Oh-orange様 いつもご回答頂き、ありがとうございます。 こちらも完成させることができました。「表示」の時よりもずいぶん簡単でした。 また何かありましたら、アドバイスを宜しくお願い致します。

その他の回答 (1)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

ファイルフォーマットが分かればBMPでも何でも作れますよ fopen( )して適切なヘッダを出力後、画像データを順次書き込めばよいでしょう。 BMPファイルフォーマットに関しては参考URLに詳しく書いてあります。 確かBMPは画像の下から書き込むんだったかな。

参考URL:
http://www.kk.iij4u.or.jp/~kondo/bmp/
DT50
質問者

お礼

早速のご回答ありがとうございます! アドバイスを参考に作ってみます。ありがとうございました。

関連するQ&A

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

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

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

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

  • C++の画像処理について【画像のピクセル値を表示する方法】

    画像処理に関する質問です。初歩的なことかもしれませんが、ご教授お願いいたします。 開発環境はVisual C++ 2005です。 JPEGまたはBMP画像を読み込んで、その画像のピクセル値を表示するプログラムを作成したいのですが、まったくどうしてよいか判らず、行き詰っています。 これまでいろいろ試してみたのですが、読み込んだ画像をBit値に変換してしまったり(そのせいでパソコンがクラッシュしてしまいました…)、うまくいきません。 画像処理の対象となる原画像を取り込み、その原画像のピクセルの色情報を表示するためには、どのような処理を行えばよいのでしょうか? どうぞよろしくお願いします。

  • Mac版IEでWeb上のWindowsのbmp画像を表示させられるか

    Mac版IEのデフォルト設定では、Webページに埋め込まれたbmp画像を表示できませんよね。これを表示させる設定は可能でしょうか。 もちろんWeb上での画像フォーマットとしてbmpを使うべきでないことは承知しています。Netscapeでは表示されることもわかっています。また、IEでも、サーバにbmp画像を単体でアップして、それを表示させるのはファイルヘルパーの指定を変更して可能になりました。ただ、htmlに埋め込まれたbmpの表示は、どう設定を変えてみてもできないのです。これは可能かどうかお聞きしたいと思います。IE初期設定のファイルヘルパー設定ダイアログで、「Windows bmp 画像」というのを変更すれば出来るように思うのですが、うまく行きません。そして変更画面ででてくるファイルの種類で、BMP, BMPf, BMPpと3種類ありますが、この違いがわかりません。クリエーターもogleでよいのかどうか… ただ単に、できないのかなと疑問に思ってお尋ねしているだけですので、もしご存知でしたらお教えいただきたいと思います。

    • ベストアンサー
    • Mac
  • BMP画像の取り扱い

    (1)BMP形式の画像を読み込み (2)RGB値を取得 (3)画素値を操作 (4)新しいファイルに書き出す というプログラムを作りたいのですが、BMP画像からRGB値がうまく取り出せません。 参考URLなどありましたらぜひ教えてください。

  • VBAでbmp画像をASCIIデータとして開く

    VBAでbmp画像ファイルをASCIIの配列データとして開き、 青色を全て赤色に変更して、jpegファイルとして保存するようなプログラムを書きたいのですが bmpファイルををASCIIの配列データとして開くためにはどのような記述を使えば良いでしょうか?

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

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

  • DIBフォーマットの読み込みとそれを元にBMPを画面へ表示する方法について

    現在DirectDrawスケルトンでDIBフォーマットを元にBMPデータを取り出して、 そのデータを元に画面に表示するまでのプログラムを勉強しています。DIBフォーマットの構造については理解したのですが、取り出したBMPデータのイメージデータ部分をどこにどう設定してどのような手順を踏んでいけば画面にBMPを表示できるのかわかりません。BMPデータを取り出してから画面に表示するまでの流れなどをわかる方がいらっしゃいましたらぜひ教えていただきたいです。 DIBフォーマットの形式は8bitで256色パレットを使用します。 別でパレットをロードする関数は自作してあるので、ヘッダを読み込んだ後はカラーテーブルをとばしてイメージデータを読み込むやり方にしようと思っています。 そこでパレットとイメージデータの各ピクセルが持つインデックス番号を関連づける方法も教えていただけるとありがたいです。 よろしくお願いします。

  • FORTRAN でBMP画像の値の取得

    FORTRAN でBMP画像の値の取得をしたいのですが,どうすればいいでしょう? たとえば,10×10画素の8bitのbmp画像の各ピクセルの値を読んで,テキストに書き出したいとします. ですので,できるファイルは・・ 1,1,255 1,2,255 ・ ・ ・ みたいに,X座標,Y座標,そこの値 っていうふうにしたいんです. わからないのは,BMP画像の値の取得方法です. また,bmpを読み込んで,その情報を元にまたbmpを作る時はどうすればいいでしょう? 長々とすいません.

  • bmp画像が見られないyo~!!

    bmp画像をデスクトップ上でクリックするとペイントで表示されるが 他のフォルダーに入れると表示されないんです! そのときに「C:\My.bmpが見つかりませんでした」と注意されます。 「My.bmp」フォルダーを作って、デスクトップ上で開いて、中にある「bmp」をクリックすると表示します。 「My.bmp」を他のフォルダーに入るとダメ…。 WEB上の「http://xxxxxxxxxx.bmp」リンクをクリックしてもダウンロード画面になります。 ファイルの関連付けが悪いんですか?? OSはWIN98 ブラウザーはIE6.0です。 よろしくお願いします。