画像データがバイナリで送られてきます。
そのでデータをピクチャーボックスに表示するにはどうすればいいでしょうか?
CImageを使用するのでしょうか??
ご存知の方いたらよろしくお願いします。
MFCで描画
Re: MFCで描画
CImage はイメージデータを管理するクラスで、BMP、GIF、JPEG、PNG を扱えます。内部で DIB を保持していますので、それ以外の形式でも DIB に変換できるのであれば、CImage を使用してピクチャーボックスに表示できます。
送られてくる画像データが何であるかが一番大切ですね。
送られてくる画像データが何であるかが一番大切ですね。
Re: MFCで描画
Bull様
返信ありがとうございます。
また、ご連絡遅くなり申し訳ありません。
データはバイナリで画像の左上から下記のような順番で受け取っています。(1ピクセルが16ビットです。)
0 1 2 … 125 126 127
128 …………
このバイナリデータをCBitmapでCreateBitmapして
CImageにAttachしてBitBltしています。
このときBitBltでエラーが出てしまいます。
返信ありがとうございます。
また、ご連絡遅くなり申し訳ありません。
データはバイナリで画像の左上から下記のような順番で受け取っています。(1ピクセルが16ビットです。)
0 1 2 … 125 126 127
128 …………
このバイナリデータをCBitmapでCreateBitmapして
CImageにAttachしてBitBltしています。
このときBitBltでエラーが出てしまいます。
Re: MFCで描画
バイナリデータの意味するところは私には分かりませんが、16Bit のビットマップデータなのでしょうか。
正しくビットマップが出来ていれば、BitBlt でエラーになることはないと思いますが、ビットマップはどのように作成していますか?
CBitmap を作成して、CImge に Attach するのは間違ってはいませんが、CImage でもビットマップは作成できます。
例えば以下のサンプルでは、100×100 の 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;
}
}