- 締切済み
C言語でBMP(16bit)を扱う方法
KEIS050162の回答
- KEIS050162
- ベストアンサー率47% (890/1879)
サンプルのソースはWebサイトで見てみましたが、ボードの仕様が分からないので、かなり一般的な概要レベルのアドバイスとなります。 手順としては、大雑把には以下の様になります。 1)BMPファイルのフォーマットを理解 2)ピクセルのデータを抜き出す 3)Cのソースファイルにデータを並べる 4)オリジナルの画像を作ってやってみる 1)については、BMPファイルの構造(Webで簡単に検索出来ます)を見ながら、試しにサンプルのmiss.bmpをダンプして(ダンプの方法もWebサイトで検索出来ます。Debugコマンドを使う方法や、フリーソフトなどでバイナリファイルがダンプ出来ます)、フォーマットと実際のヘッダー情報やピクセルデータの並びを理解します。 2)は、ピクセルデータ部分だけを抜き出してCのソースに使える形、即ちテキストのフォーマットにします。フリーのダンプソフトなどを使うと簡単にテキストに変換できます。 ただし、恐らくそのままは使えず、ビット長を変換しないとならないと思いますが、ボードのグラフィックの仕様書と、BMPファイルの各ピクセルのビット表現を比べて適切に変換します。Windows上で動作するCコンパイラなどがあれば、プログラムを作ってしまうのが楽だと思います。 3)出来上がったピクセルデータは、16ビット長の16進表現(例えば、BD 6A とか)になっていると思いますが、これを再度10進変換しなくても、&hを付けて、&hBD6Aと記述していけばよいです。 例えば、 unsigned short data[] = {48490,48490,48490,… だった部分は、 unsigned short data[] = {&hBD6A, &hBD6A, &hBD6A, … と書き換えていけばOKです。縦横のサイズは間違えない様に。 4)だいたい手順が理解出来たら、サンプルのBMPファイルと同じサイズのデータをペイントなどで作成し、上の手順でCのソースコードのデータにしていけば、オリジナルの”もぐらたたき”が出来上がります。 ビット長を変換するのがちょっとやっかいですが、ある程度C言語が使えて、Windowsのプログラムが作成できるCコンパイラがあれば、BMPファイルを読み込んで、そのボード用のグラフィックデータ(テキスト)に変換するプログラムなどを作ってしまう(さほど難しくはありません)のが良いと思います。もちろんプログラムを組まなくても、(16進が使える)電卓を叩いたり、エクセルなどでも出来なくはないですが、何枚もの画像を変換するとなるとちょっと手間です。 かなり大雑把な説明ですが、それぞれの方法(BMPのフォーマット、DUMPなど)はWebなどで検索しながら勉強していってみてください。 ご参考に。
関連するQ&A
- 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); } なのですが、これはメインウィンドウでは動くのですが、ダイアログボックスでは動かずこまっています。 どうか、助言のほどよろしくお願いします。
- ベストアンサー
- C・C++・C#
- C言語の基礎を
プログラマになりたくて、調べたら、まずはC言語から始めた方がいいと書いてあったので、さっそく教材(これからはじめるC言語の本)を買って基礎を覚えました。とりあえず買った教材は配列で終わっていたので配列まで勉強しました。基礎を覚えたら何をやればいいのかさっぱりわからないんです。ネットでCで書かれたソースを見てみると、まったく見たことのない言葉があったりして、Cをマスターするにはそういった言葉が全部わからないといけませんよね。プログラマの人はCぐらいできないとダメですよね。 配列が終わった後、何を勉強すればいいのか教えてください。 回答お願いします。
- 締切済み
- その他([技術者向] コンピューター)
- C言語で長方形を作る
C言語で長方形の絵を作るにはどうすればよいのでしょうか?forなどの制御構造は分かるのですが画像になるとさっぱりです。まず家のパソコンでやる場合、特別なソフトが必要ですか? C言語による画像作成についてのURLやサンプルプログラミングがあれば教えていただきたいです。
- 締切済み
- C・C++・C#
- C言語 丸(●)の作り方
C言語で配列の中に●のデータを入れたいのですが ex) char BOX[6][6]={ {0,0,1,1,0,0}, {0,1,1,1,0,0}, {1,1,1,1,1,1}, {1,1,1,1,1,1}, {0,1,1,1,1,0}, {0,0,1,1,0,0}, } このように入れるためのプログラムが教えてほしいです
- 締切済み
- C・C++・C#
- C言語をどうしたら?
学校でC言語を習っています。 そして学校ではC言語を確かビュジアルネットというソフトにソースファイルなどを入れてプログラムを練習しているのですが、家でも練習したいのでどうしたらいいか教えてください。できましたらフリーソフトとその使い方を教えてくださるとうれしいです。 そして、いつかは他のパソコンでもそれが体験できるようにしたいので、その場合の方法も教えてください。
- ベストアンサー
- C・C++・C#
- C言語について
C言語を学習しています。 入門レベルの知識しか有りません。 <演習問題> 要素数nの配列v内のkeyと等しい全要素の添字を配列idxに格納する 関数search_idxを作成せよ。 返却するのはkeyと等しい要素の個数とする。 int search_idx(const int v[], int idx[], int key, int n); 例えば、vに受け取った配列の要素が{1,7,5,7,2,4,7}でkeyが7で あれば、idxに{1,3,6}を格納した上で3を返却する。 というのが有るのですが、上手くプログラムが組めません。 ソースコードを伝授して頂けたら有難いです。
- ベストアンサー
- C・C++・C#
- C言語でゲームを作りたいんですど・・・
変数4つ、配列一つ 制御文はif文、switch文、繰り返し制御をそれぞれ1回以上使って、C言語のゲームを作りたいんですけど、まったくわかりません。 どんなソースを作ればいいでしょうか??
- 締切済み
- その他(ゲーム)
- VBでC言語のポインタみたいな使い方?
VBでC言語のポインタみたいに、一個の関数に配列のアドレスを渡して汎用的に使える方法は出来ますでしょうか? 宜しくお願いします。 PS:配列のデータは直線を描く為のデータです。
- ベストアンサー
- Visual Basic