在Windows内存设备上下文绘图 - 解决?

时间:2013-05-06 15:03:18

标签: winapi memory bitmap resolution device-context

我正在尝试以位图的形式导出我的程序生成的绘图。在内存中创建位图(使用CreateDIBSection)并将其保存在磁盘上(使用GDI +)没有问题。要绘制我必须使用设备上下文,并且唯一容易获得的是与屏幕兼容。所以我创建了一个兼容的dc,选择我已经在这个设备上下文中创建的位图,我准备绘制并打印到位图中。它可以工作 - 但它让我无法控制绘图的大小(注意:绘图的大小,而不是位图的大小)。如果我正确理解了映射模式正在发生的事情,请遵循屏幕DC的DPI,这反过来意味着绘图的大小(以及我在绘图上放置的文本)在不同的计算机上是不同的。

有没有办法更改设备上下文的DPI分辨率?或者也许存在一种更好的方式来做我想做的事情?完美的解决方案是询问用户像素位图的大小,并能够绘制一个非常适合位图的图。

1 个答案:

答案 0 :(得分:0)

您现在已经使用Gdiplus而不是GDI,因此您不必使用设备上下文。您只需将Gdiplus::Graphics对象与Gdiplus::Bitmap关联,而不是HDC。单位和转换更不用说位图大小都与设备无关。希望有所帮助。

Gdiplus::Bitmap bitmap( L"miranda_kerr.png" ); // draw over existing
Gdiplus::Graphics graphics( &bitmap );

Gdiplus::Pen pen( Gdiplus::Color(255,0,0));
Gdiplus::Status status = graphics.DrawLine( &pen, 20, 20, 100, 500 );
//...