将增强型图元文件转换为Windows图元文件而不进行像素舍入的正确方法

时间:2011-02-08 23:47:41

标签: winapi metafile

当我将增强型图元文件(通过C#中的GDI +构建)转换为旧式Windows图元文件时,结果非常粗糙,显然是因为坐标被舍入到最近的屏幕像素。如果我通过

转换,我会看到这个

GetWinMetaFileBits(emfh,bits_l,bits,MM_ANISOTROPIC,GetDC(0));

或使用GDI +的Metafile :: EmfToWmfBits。罪魁祸首可能是使用的屏幕DC。 This posting建议使用适用于我的打印机DC,但如果用户没有安装打印机,则显然无效。有没有更好的办法?我考虑过为这个目的创建一个高分辨率的内存中的DC,但我找不到这样做的正确文档,我也担心使用的RAM。

2 个答案:

答案 0 :(得分:1)

正常的方法是创建一个更高分辨率的内存DC,渲染到它,然后保存它你想要的。请注意,字体大小可能会被搞砸。

 HDC memDC = CreateCompatibleDC ( hDC );
 HBITMAP memBM = CreateCompatibleBitmap ( hDC, nWidth, nHeight );
 SelectObject ( memDC, memBM );

nWidth,nHeight要大得多。
CreateCompatible位应设置所有dpi等,但我遇到的问题是字体被绘制为固定的像素大小而不是重新缩放 - 所以它们最终在10,000像素图像上只有10pixels高

答案 1 :(得分:0)

向Google索取ENMETA.EXE

Microsoft的描述

包含下载的示例。