こんにちは、親愛なる教祖と専門家のコーダーです。
私は初心者から始めるつもりはなく、画像プログラミングについてはあまり知りませんが、残念ながらそれらは事実です:(
解像度1392x1032のビットマップポインタ*ImageDataから画像を表示しようとしています。解像度またはサイズ627x474の領域でそれを描画しようとしています。
ただし、繰り返し試行してもうまくいかないようです。作成したビットマップ画像を*ImageDataの幅と高さから解像度または約627x474のサイズに変更すると機能します
さまざまなフォーラムやグーグルから可能なすべての解決策を試した後、私は本当にこれを解決する方法を知りません。
pDCはCDC*であり、memDCは以前のメソッドで初期化されたCDCです。ここで初期化されていないものはすべて、他のメソッドで初期化されました。
これが私のコードです。ルーク・スカイウォーカーに提供されたヨーダとオビ=ワンのガイダンスを私に提供してください。
void DemoControl::ShowImage( void *ImageData )
{
int Width; //Width of Image From Camera
int Height; //Height of Image From Camera
int m_DisplayWidth = 627 ;//width of rectangle area to display
int m_DisplayHeight = 474;//height of rectangle area to display
GetImageSize( &Width, &Height ) ; //this will return Width = 1392, Height 1032
CBitmap bitmap;
bitmap.CreateBitmap(Width,Height,32,1,ImageData);
CBitmap* pOldBitmap = memDC.SelectObject((CBitmap*)&bitmap);
pDC->BitBlt(22, 24, 627, 474, &memDC, 0, 0, SRCCOPY);
memDC.SelectObject((CBitmap*)pOldBitmap);
ReleaseDC(pDC);
}
ここにいくつかの追加パーツがあります
流れがどうなるかを説明したほうがいいと思います。
(a)クラス(たとえばDemoTestingDlgクラス)は、以下のようにCDCを別のクラス(たとえばDemoControlクラス)に渡します。
m_Demo = new DemoControl ;
m_Demo->Initialisation( this, this->GetDC() ) ;
(b)DemoControlクラスで
bool DemoControl :: Initialisation(CDemoTestingDlg m_FormControl、CDC m_StaticDisplay){
pDC = m_StaticDisplay ;
memDC.CreateCompatibleDC(pDC);
}
pDCとmemDCは、ヘッダーにそのようなものがあります。
CDC* pDC ; CDC memDC;
(c)画像がキャプチャされたとすると、画像ポインタはDemoTestingDlgクラスに渡され、その後、質問で作成したメソッドであるDemoControlClassのshowImageメソッドが呼び出されます。私はそれを正しくやっていますか?
注:同じサイズ(CDCとビットマップを意味します)であると言えば画像が表示されたので、CDCポインターが正しく渡されたという印象を受けました