MFCで描画

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アキラ

MFCで描画

#1

投稿記事 by アキラ » 5年前

画像データがバイナリで送られてきます。
そのでデータをピクチャーボックスに表示するにはどうすればいいでしょうか?
CImageを使用するのでしょうか??

ご存知の方いたらよろしくお願いします。

Bull
記事: 149
登録日時: 9年前

Re: MFCで描画

#2

投稿記事 by Bull » 5年前

CImage はイメージデータを管理するクラスで、BMP、GIF、JPEG、PNG を扱えます。内部で DIB を保持していますので、それ以外の形式でも DIB に変換できるのであれば、CImage を使用してピクチャーボックスに表示できます。
送られてくる画像データが何であるかが一番大切ですね。

アキラ

Re: MFCで描画

#3

投稿記事 by アキラ » 5年前

Bull様
返信ありがとうございます。
また、ご連絡遅くなり申し訳ありません。

データはバイナリで画像の左上から下記のような順番で受け取っています。(1ピクセルが16ビットです。)
0 1 2 … 125 126 127
128 …………

このバイナリデータをCBitmapでCreateBitmapして
CImageにAttachしてBitBltしています。
このときBitBltでエラーが出てしまいます。

Bull
記事: 149
登録日時: 9年前

Re: MFCで描画

#4

投稿記事 by Bull » 5年前

バイナリデータの意味するところは私には分かりませんが、16Bit のビットマップデータなのでしょうか。

正しくビットマップが出来ていれば、BitBlt でエラーになることはないと思いますが、ビットマップはどのように作成していますか?

CBitmap を作成して、CImge に Attach するのは間違ってはいませんが、CImage でもビットマップは作成できます。
例えば以下のサンプルでは、100×100 の 16Bit ビットマップを作成して、データを直接書込んでいます。

コード:

CImage image;
image.Create(100, 100, 16);

HBITMAP	bmp = (HBITMAP)image;
BITMAP	bitmap;
::GetObject(bmp, sizeof(BITMAP), &bitmap);
unsigned short *bits = (unsigned short *)bitmap.bmBits;

unsigned char r = 31;
unsigned char g = 31;
unsigned char b =  0;
for (int y = 0; y < 10; ++y) {
	for (int x = 0; x < 100; ++x) {
		bits[100 * y + x] = (r << 10) + (g << 5) + b;
	}
}
なお、ビットマップは普通ボトムアップ(上下反転)です、ご存じだとは思いますか念のため。

返信

“C言語何でも質問掲示板” へ戻る