gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:11:57 25 4
gpt4 key购买 nike

美好的一天!如果你很懒,你可以试试只读高亮字词:)

源文件 .doc 和 .xls

我有word文档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) //default parameters

我的程序再次获取它就像一个EnhMetaFile (HENHMETAFILE)。但是当我播放这个图元文件时,我得到平滑的图片 407x156

为什么会这样?我怎样才能避免这种情况?求助,我已经2天无法解决这个问题了。

我的一些观察:

如果我从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;
...
};

我直接在主窗口上显示它以进行快速调试:)
左图不错。右图经过平滑处理。

enter image description here

最佳答案

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

关于c++ - 将图片从excel复制到剪贴板->在程序中输出->得到平滑的图片。失败在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20021147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com