2011-07-05 18 views
0

私が持っているプログラムは、カメラにsetDIbitstodeviceを使用しています。setDIbitstodevice Turbo C++

SetDIBitsToDevice(PaintBox->Canvas->Handle, 0, 0, 160, 120, 
    0, 0, 0, 120, 
    Image, 
    (LPBITMAPINFO)&mapHead, DIB_RGB_COLORS); 

そして:私は、コードは次のように書かれていることがわかり

Image = new unsigned char [ 160 * 120 * 4 ] 

私はそれが何を意味するのか分かりません。私はImageunsigned charの他の形式に変更すると、画像表示も変わると言われましたが、私はそれを行い、何も得られませんでした。

アドバイスお願いいたします。

+0

どうしたのですか?画像は「符号なしの文字」ではありません。 'SetDIBitsToDevice'関数の[documentation](http://msdn.microsoft.com/en-us/library/dd162974.aspx)を読んだことがありますか? –

答えて

1

unsigned charはturbo C++のバイトサイズですので、 'Image = new ...'行は160ピクセル幅、120ピクセル高さ、4バイト深さのImageにいくらかのメモリを割り当てています。赤、緑、青、アルファチャンネルの4バイトはそれぞれ1バイトになります(これらはアルファチャンネルをサポートしていませんが、そうは思いませんが、必要以上に多くのメモリを割り当てているので、おそらくメモリを浪費している)。

SetDIBitsToDeviceはImage内のピクセルを取り込み、paintboxに(ハンドルを介して)表示します。 Teeパラメータは、宛先のサイズなどです(http://msdn.microsoft.com/en-us/library/dd162974(VS.85).aspxを参照)。ビットマップを伸ばす(つまり、表示サイズを変更する)場合は、StretchDIBits http://msdn.microsoft.com/en-us/library/dd145121(v=VS.85).aspxを見てください。

hth

+0

私は見る...私は今写真を持っていますが、それは逆さまです。 – Chang

関連する問題