如何在MFC C ++应用程序中保存到位图?
|
我只是从MFC开始,所以请宽容;)。
我已经编写了一个简单的应用程序(说实话,它主要是生成的),它应该完成Paint的琐事:绘制线条,矩形,椭圆形,更改要绘制的对象的颜色等。
我需要将屏幕上绘制的内容保存到bmp文件中。有什么想法可以实现吗?
我不知道这是否相关,但是我在屏幕上绘制对象而不使用任何CBitmap或类似的东西。这是负责绘图的部分代码:
CPaintDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
Anchor.x=point.x;
Anchor.y=point.y;
OldPoint.x=Anchor.x;
OldPoint.y=Anchor.y;
if(pDoc->shapeCount>=MAX_SHAPES) return;
pDoc->shapeCount++;
if(bFreehand)
{
pDoc->m_shape[pDoc->shapeCount-1] = new Shape;
pDoc->m_shape[pDoc->shapeCount-1]->shape = ePoint;
}
if(bLine)
{
pDoc->m_shape[pDoc->shapeCount-1] = new CLine;
pDoc->m_shape[pDoc->shapeCount-1]->shape = eLine;
}
if(bRectangle)
{
pDoc->m_shape[pDoc->shapeCount-1] = new CRectangle;
pDoc->m_shape[pDoc->shapeCount-1]->shape = eRectangle;
}
if(bEllipse)
{
pDoc->m_shape[pDoc->shapeCount-1] = new CEllipse;
pDoc->m_shape[pDoc->shapeCount-1]->shape=eEllipse;
}
pDoc->m_shape[pDoc->shapeCount-1]->x=point.x;
pDoc->m_shape[pDoc->shapeCount-1]->y=point.y;
pDoc->m_shape[pDoc->shapeCount-1]->x2=point.x;
pDoc->m_shape[pDoc->shapeCount-1]->y2=point.y;
pDoc->m_shape[pDoc->shapeCount-1]->Pen=CurrentPen;
pDoc->m_shape[pDoc->shapeCount-1]->Brush=CurrentBrush;
bButtonDown=true;
SetCapture();
我已经找到了这样做的方法,但是我不知道如何获取屏幕的宽度和高度以将其填充到CreateBitmap参数的列表中
CBitmap *bitmap;
bitmap.CreateBitmap(desktopW, desktopH, 1, 32, rgbData);
CImage image;
image.Attach(bitmap);
image.Save(_T(\"C:\\\\test.bmp\"), Gdiplus::ImageFormatBMP);
没有找到相关结果
已邀请:
1 个回复
犁攀富
获得一个
对象,您可以查询该对象的宽度和高度: http://msdn.microsoft.com/zh-CN/library/bkxb36k8(v=VS.80).aspx 一般来说,这会变得很狡猾...如果除了多监视器场景外没有其他原因...所以我建议不要这样做,除非您真的想编写一个屏幕捕获应用程序。 您可能想要做的不是全屏拍摄,而只是保存程序窗口的内容。通常,您可以通过中断程序的绘制逻辑来做到这一点,以便在paint方法中调用一个辅助函数,该函数被编写为采用“ 5”设备上下文。然后,您可以在绘画调用中获得的基于窗口的DC上调用该函数,也可以在从位图创建的DC上调用该函数以进行保存。请注意,您可以在
中使用
: http://msdn.microsoft.com/zh-CN/library/432f18e2(v=VS.71).aspx (尽管我让您不使用MFC。请尝试使用Qt。更好。)