Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将CGImageRef放在剪贴板上_C++_C_Core Graphics_Macos Carbon - Fatal编程技术网

C++ 将CGImageRef放在剪贴板上

C++ 将CGImageRef放在剪贴板上,c++,c,core-graphics,macos-carbon,C++,C,Core Graphics,Macos Carbon,我正在尝试将CGImageRef复制到剪贴板粘贴板。我发现了一个函数,它声称应该通过创建一个目的地(零大小),将图像添加到目的地,完成,然后将引用粘贴到剪贴板中来实现这一点 但是它不起作用,所以有两个问题: 这样做正确吗?(也就是说,这只是一个小错误,还是我做错了?) 我应该选择什么类型的目的地?消息来源称它是TIFF,但word似乎不知道如何处理它,我将它改为PICT,这至少给了我“粘贴”选项,但后来说它太大了 代码: 好的,我在这里回答我自己的问题,但我发现: 苹果希望你使用PDF制作粘贴板

我正在尝试将CGImageRef复制到剪贴板粘贴板。我发现了一个函数,它声称应该通过创建一个目的地(零大小),将图像添加到目的地,完成,然后将引用粘贴到剪贴板中来实现这一点

但是它不起作用,所以有两个问题:

  • 这样做正确吗?(也就是说,这只是一个小错误,还是我做错了?)

  • 我应该选择什么类型的目的地?消息来源称它是TIFF,但word似乎不知道如何处理它,我将它改为PICT,这至少给了我“粘贴”选项,但后来说它太大了

  • 代码:


    好的,我在这里回答我自己的问题,但我发现:

    苹果希望你使用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 );
    }