美好的一天!如果你很懒,你可以尝试只读突出显示的字样:)
我的文字 colors.doc 。它包含一个图片325x125 ,扩展名为png,显示全尺寸的44%缩放。 我复制( Ctrl + C )此图片并粘贴( Ctrl + V ) car.xls 。图片粘贴44%变焦,我将其设置为100%。然后我关闭并保存这两个文件。
我有一个程序,其中打开colors.doc并将图片复制到剪贴板:
Shapes.Item(1).Select Selection.CopyAsPicture
程序 从剪贴板获取,如 EnhMetaFile (HENHMETAFILE)。当我播放该图元文件时,我得到一张好照片而没有平滑。程序存储此图片和关闭colors.doc 。然后打开car.xls并使用:
将图片复制到剪贴板Shapes.Item(1).CopyPicture(xlSreen,xlPicture)//默认参数
我的程序再次,就像 EnhMetaFile (HENHMETAFILE)一样。但是当我播放图元文件时,我得到平滑的图片407x156 。
如果我从 car.xls 复制(Ctrl + C)图片并将其粘贴(Ctrl + V)到任何图形编辑器,我会得到一张好照片!!
如果你不害怕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;
...
};
我直接在主窗口上显示它以便快速调试:)
左图很好。正确的图片是平滑的。
答案 0 :(得分:1)
我遇到了同样的问题,但使用Shapes.Item(1).Copy(...)
代替CopyPicture
解决了这个问题。