嗨,亲爱的专家和编码专家。
我不会从一个新手开始,我对图像编程不太了解,但不幸的是这些都是事实:(
我正在尝试从分辨率为 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 类,该类随后将调用演示控件类中的 showImage 方法,这是我在问题中编写的方法。我做对了吗?
注意:如果假设它们的大小相同(我指的是 CDC 和位图),它确实显示了一个图像,所以我的印象是我的 CDC 指针传递正确