从excel复制图片到剪贴板 – >在程序中输出 – >获得平滑的图片。 哪里失败?

美好的一天! 如果你是懒惰的,你可以尝试只读强调的话:)

源文件.doc和.xls

我有文件colors.doc这个词。 它包含一个图片325×125扩展PNG,它显示全尺寸的44%缩放。 我复制( Ctrl + C )这个图片并粘贴( Ctrl + V )在car.xls 。 图片粘贴44%的缩放,我把它设置为100%。 然后closures并保存这两个文件。

该程序:

我有一个程序 ,它打开colors.doc和复制图片到剪贴板使用:

Shapes.Item(1).Select Selection.CopyAsPicture 

程序从剪贴板中 获取 EnhMetaFile (HENHMETAFILE)。 而当我玩这个图元文件,得到一个很好的照片,没有平滑。 程序存储图片closurescolors.doc 。 然后打开car.xls并使用以下命令将图片复制到剪贴板

Shapes.Item(1).CopyPicture(xlSreen,xlPicture)//默认参数

和我的程序再次得到它像一个EnhMetaFile (HENHMETAFILE)。 但是,当我玩这个图元文件,得到平滑的图片407×156

为什么会发生? 我怎样才能避免这一点? 请帮忙,我已经2天不能决定这个麻烦了。

我的一些观察:

如果我从car.xls复制(Ctrl + C)图片并粘贴(Ctrl + V)到任何graphics编辑器,我会得到一张好照片!

鳕鱼:

如果你不是害怕WINAPI和Ole请看下面的代码:

 Picture::InitFromBuffer(){ OpenClipboard(DebHDlg); HENHMETAFILE emfp = (HENHMETAFILE)GetClipboardData(CF_ENHMETAFILE); memset(&head, 0, sizeof(ENHMETAHEADER)); head.nSize = sizeof(ENHMETAHEADER); GetEnhMetaFileHeader(emfp, sizeof(ENHMETAHEADER), &head); data = new BYTE[head.nBytes]; GetEnhMetaFileBits(emfp, sizeof(BYTE)*(head.nBytes), data); CloseClipboard(); } Picture::Display(HWND hDlg){ if (hDlg != NULL){ HDC hDC = GetDC(DebHDlg); int er; RECT r; HENHMETAFILE emfp = SetEnhMetaFileBits(this->head.nBytes, this->data); GetClientRect(DebHDlg, &r); if (!PlayEnhMetaFile(hDC, emfp, &r)) er = GetLastError(); ReleaseDC(hDlg, hDC); } } struct Picture{ ENHMETAHEADER head; BYTE *data; ... }; 

我直接显示它在主窗口快速debugging:)
左图是好的。 正确的图片是平滑的。

在这里输入图像说明

我有同样的问题,但通过使用Shapes.Item(1).Copy(...)而不是CopyPicture来解决它。