从gdiplus (GDI+)中的设备上下文或图形对象中获取图像/位图
Get an Image/Bitmap from a device context or graphics object in gdiplus (GDI+)
我正在寻找一种方法,这个GDI代码如何从设备上下文获得位图…
void CMFCDlg::OnPaint()
{
CDC dc(this); // Device Context for painting
CBitmap backgroundBmp;
// Get Client Area
CRect clientRect;
GetClientRect(&clientRect);
// Create memory DC
CDC memDC;
memDC.CreateCompatibleDC(&dc);
// Create compatible bitmap
backgroundBmp.CreateCompatibleBitmap(&memDC, clientRect.Width(), clientRect.Height());
// Copy Blt Bits from DC to Bitmap
CBitmap* pOldBmp = dc.SelectObject(&backgroundBmp);
memDC.BitBlt(0, 0, clientRect.Width(), clientRect.Height(), &dc, 0, 0, SRCCOPY);
dc.SelectObject(pOldBmp);
// Release the memory DC
memDC.DeleteDC();
}
…可以在GDI+中完成接收GDI+图像或位图。
我正在寻找一种接近这个草稿的方法:
void CMFCDlg::OnPaint()
{
CDC dc(this); // Device Context for painting
Bitmap backgroundBmp;
// Get Client Area
CRect clientRect;
GetClientRect(&clientRect);
// Get graphics object from device context
Graphics gr(dc);
// Somehow create a compatible GDI+ bitmap
backgroundBmp = gr.??????
}
我只见过涉及GDI对象和资源的代码,这些代码后来被转换为GDI+对象。但是它们都不适合我,我觉得有一种(简单的)其他方法可以用更舒适的GDI+环境来做到这一点。
只能在设备上下文中绘制GDI+。但是您可以使用内存设备上下文,然后绘制到dc或保存到file:
CClientDC dc(this);
CDC memdc;
memdc.CreateCompatibleDC(&dc);
CBitmap bitmap;
bitmap.CreateCompatibleBitmap(&dc, 100, 100);
CBitmap *oldbitmap = (CBitmap*)memdc.SelectObject(&bitmap);
Gdiplus::Graphics graphics_memdc(memdc);
Gdiplus::Pen pen(Gdiplus::Color(255, 0, 128, 255), 5);
Gdiplus::Rect rect(10, 10, 80, 80);
graphics_memdc.DrawRectangle(&pen, rect);
现在画到dc
dc.BitBlt(0, 0, 100, 100, &memdc, 0, 0, SRCCOPY);
memdc.SelectObject(oldbitmap);
或使用CImage
将memdc
保存到文件
CImage cimage;
cimage.Create(100, 100, 32);
HDC imageHDC = cimage.GetDC();
::BitBlt(imageHDC, 0, 0, 100, 100, memdc.GetSafeHdc(), 0, 0, SRCCOPY);
cimage.Save(L"c:\test\fileName.jpg", GUID_NULL);
cimage.ReleaseDC();
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- 我该如何解决错误,说明创建图形对象没有放置在图形场景中
- 将 OpenGL 实例化图形与移动对象一起使用
- 有没有办法在更改与 HDC 关联的位图大小后更新图形对象?
- 如何在涡轮C 图形中设置对象的自定义边框宽度
- 如何快速绘制10000 2D图形对象
- 在Boost Graph中定义了图形后,在构造函数中初始化了effled_graph对象
- 添加可绘制对象层以将逻辑与图形分离
- QT - 拖放 - 在自定义场景上创建自定义图形对象的位置
- 用于渲染不同类型的图形对象的引擎
- boost::d ynamic_properties 和不可变的图形对象
- 如何使用窗口的C++图形(GDI+)库移动对象?
- 无法在C++图形中绘制对象
- python中基于对象的图形表示
- 从gdiplus (GDI+)中的设备上下文或图形对象中获取图像/位图
- GDI+图形对象-当用GDI直接绘制到DC时,抗混叠丢失
- 相邻列表自引用到图形对象
- 通过boost发送一个简单的boost图形对象:MPI得到错误
- 为带有3d对象的图形设置合适的坐标