将CGImageRef放在剪贴板上

时间:2009-01-20 20:35:12

标签: c++ c core-graphics macos-carbon

我正在尝试将CGImageRef复制到剪贴板粘贴板。我找到了一个函数,声称它应该通过从(零大小)创建一个目标,将图像添加到目标,最终确定,然后将PasteboardPutItemFlav或ref添加到剪贴板中来实现此目的。

然而它不起作用,所以有两个问题:

  1. 这是正确的方法吗? (即,是否只是一个小错误,或者我做错了?)

  2. 我应该选择哪种类型的目的地?来源把它作为TIFF,但是单词似乎不知道如何处理,我将其改为PICT,至少给了我“粘贴”选项,但后来说它太大了......

  3. 代码:

    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 );
    }
    

2 个答案:

答案 0 :(得分:2)

输入James Dempsey的“Cupertino Tongue Twister”

彼得把PICT放在了粘贴板上。

不推荐使用PICT是一种糟糕的粘贴板类型。

参考:http://developer.apple.com/mac/library/documentation/cocoa/Conceptual/PasteboardGuide106/Articles/pbUpdating105.html

简而言之:不推荐将PICT放在粘贴板上。

答案 1 :(得分:0)

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

Apple希望您将PDF用于粘贴板。因此,如果您将Pict换成PDF,那么它非常有效。但是,MS Word(我正在测试的内容)才开始允许在最新版本(我没有)中粘贴PDF。

所以,这就是解决方案,使用PDF,并需要Word 2008。