C++ 将CGImageRef放在剪贴板上
我正在尝试将CGImageRef复制到剪贴板粘贴板。我发现了一个函数,它声称应该通过创建一个目的地(零大小),将图像添加到目的地,完成,然后将引用粘贴到剪贴板中来实现这一点 但是它不起作用,所以有两个问题:C++ 将CGImageRef放在剪贴板上,c++,c,core-graphics,macos-carbon,C++,C,Core Graphics,Macos Carbon,我正在尝试将CGImageRef复制到剪贴板粘贴板。我发现了一个函数,它声称应该通过创建一个目的地(零大小),将图像添加到目的地,完成,然后将引用粘贴到剪贴板中来实现这一点 但是它不起作用,所以有两个问题: 这样做正确吗?(也就是说,这只是一个小错误,还是我做错了?) 我应该选择什么类型的目的地?消息来源称它是TIFF,但word似乎不知道如何处理它,我将它改为PICT,这至少给了我“粘贴”选项,但后来说它太大了 代码: 好的,我在这里回答我自己的问题,但我发现: 苹果希望你使用PDF制作粘贴板
好的,我在这里回答我自己的问题,但我发现: 苹果希望你使用PDF制作粘贴板。所以,如果你用PDF替换Pict,它会非常有效。然而,MSWord(我正在测试的)只允许在最新版本(我没有)中粘贴PDF 因此,这就是解决方案,使用PDF,并要求Word 2008。输入詹姆斯·邓普西的“库比蒂诺绕口令” 彼得在纸板上放了一张画图 不推荐使用的PICT是一种不好的粘贴板类型 有关参考资料,请参阅:
简而言之:不赞成将PICT放在粘贴板上。你说的“它不工作”是什么意思?正如我所说,我认为它实际上并没有创建PICT数据。当我尝试粘贴它时,它说图像太大了。我在其他网站上看到,Mac电脑不想再创建PICT了,所以,这是有道理的……你没有说过这样的话;你只是说“它不起作用”。不管怎样,在Finalize调用之后,您是否检查了数据对象的长度,以及PasteboardPutItemFlavor返回的错误?嗯,我说要粘贴的东西太大了。没有错误,我检查过了。我没有检查数据长度,因为1)我不知道怎么做,2)我不知道正确的数据长度应该是多少…你也应该能够将PICT数据放在粘贴板上。请看我对你的问题的评论。我认为问题在于CG函数不想创建PICT。。。所以没有字典来解释这个。。。不管怎么说,以PDF格式做任何事情都是可行的,而且似乎是未来的发展方向。。。
void copyCGImageRefToPasteboard(CGImageRef ref)
{
OSStatus err = noErr;
PasteboardRef theClipboard;
err = PasteboardCreate( kPasteboardClipboard, &theClipboard );
err = PasteboardClear( theClipboard );// 1
CFMutableDataRef url = CFDataCreateMutable(kCFAllocatorDefault, 0);
CFStringRef type = kUTTypePICT;
size_t count = 1;
CFDictionaryRef options = NULL;
CGImageDestinationRef dest = CGImageDestinationCreateWithData(url, type, count, options);
CGImageDestinationAddImage(dest, ref, NULL);
CGImageDestinationFinalize(dest);
err = PasteboardPutItemFlavor( theClipboard, (PasteboardItemID)1, type, url, 0 );
}