gpt4 book ai didi

c++ - 如何在 MFC C++ 应用程序中保存到位图?

转载 作者:太空宇宙 更新时间:2023-11-04 12:18:39 25 4
gpt4 key购买 nike

我刚开始使用 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);

最佳答案

CreateBitmap 调用只需要桌面的宽度和高度,前提是您要保存的图像实际上是整个屏幕的大小。如果这确实是您的意图,您可以使用 CWnd::GetDesktopWindow() 获取一个 CWnd 对象,您可以查询它的宽度和高度:

http://msdn.microsoft.com/en-us/library/bkxb36k8(v=VS.80).aspx

这通常会变得不可靠...如果不是因为多显示器场景以外的其他原因...所以我建议不要使用它,除非您真的想编写一个屏幕捕获应用程序。

您可能想要做的不是全屏截图,而是保存程序窗口的内容。通常,您会通过分解程序的绘图逻辑来执行此操作,以便在 paint 方法中调用一个辅助函数,该函数是为获取 CDC 设备上下文而编写的。然后,您可以在绘制调用中获得的基于窗口的 DC 上调用该函数,或者在您从位图创建的 DC 上调用该函数以进行保存。请注意,您可以在 CDC::SelectObject 中使用 CBitmap:

http://msdn.microsoft.com/en-us/library/432f18e2(v=VS.71).aspx

(虽然让我建议您不要使用 MFC。请尝试使用 Qt。更好。)

关于c++ - 如何在 MFC C++ 应用程序中保存到位图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6325699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com