为什么小牛队的QLPreviewRequestSetDataRepresentation会返回错误" CGImageCreate:图片大小无效:0 x 0"对于png

时间:2014-07-02 08:30:08

标签: osx-mavericks quicklook

我的快速生成器用于正常工作但现在已损坏 这是一个错误还是我做错了什么?

这是我的代码:

OSStatus GeneratePreviewForURL(void *thisInterface, QLPreviewRequestRef preview, 
                               CFURLRef url, CFStringRef contentTypeUTI, 
                               CFDictionaryRef options) {

    NSDictionary * myDoc = [NSDictionary dictionaryWithContentsOfURL:(NSURL *)url];

        if (myDoc) {

            NSData * pngData = [myDoc valueForKey:@"pngPreview"];

            if (pngData) {

                QLPreviewRequestSetDataRepresentation(preview,(__bridge CFDataRef)pngData,
                                                      kUTTypeImage,NULL);
            }
        }
}

我的doc是一个普通的plist,其中png预览存储为数据 我检查了pngPreview确实包含png数据,我创建了图像,其大小为350×350。

但是,我经常遇到这些错误:

qlmanage[702] : CGImageCreate: invalid image size: 0 x 0.
qlmanage[702:303] *** CFMessagePort: bootstrap_register(): failed 1100 (0x44c) 'Permission denied', port = 0x9e27, name = 'com.apple.tsm.portname' See /usr/include/servers/bootstrap_defs.h for the error codes.
qlmanage[702:303] *** CFMessagePort: bootstrap_register(): failed 1100 (0x44c) 'Permission denied', port = 0x3f2b, name = 'com.apple.CFPasteboardClient' See /usr/include/servers/bootstrap_defs.h for the error codes.
qlmanage[702:303] Failed to allocate communication port for com.apple.CFPasteboardClient; this is likely due to sandbox restrictions

我的应用程序没有沙盒,所以我认为最后3个错误并不重要。

我曾经使用kUTTypePNG,但尝试过kUTTypeImage无效(QLPreviewRequestSetDataRepresentation的文档说当前支持的UTI是kUTTypeImage,kUTTypePDF,kUTTypeHTML,kUTTypeXML,kUTTypePlainText,kUTTypeRTF,kUTTypeMovie和kUTTypeAudio)。

其他要考虑的要点: 文档说明: “快速查看生成器的二进制文件必须是通用的,并且必须是32位的。” This page 但是this page说:  “对于OS X v10.6及更高版本,您必须为32位和64位构建Quick Look生成器。”哪个相当不清楚...
如何设定目标?

1 个答案:

答案 0 :(得分:3)

面对同样的问题,我决定采用另一种方式:使用QLPreviewRequestCreateContext获取绘制图像的上下文:

QLPreviewRequestRef preview; // The preview request passed to GeneratePreviewForURL()
CGImageRef image;  // Create your CGImage however you like
CGSize size = CGSizeMake(CGImageGetWidth(image), CGImageGetHeight(image));
CGContextRef ctxt = QLPreviewRequestCreateContext(preview, size, YES, nil);
CGContextDrawImage(ctxt, CGRectMake(0, 0, size.width, size.height), image);
QLPreviewRequestFlushContext(preview, ctxt);
CGContextRelease(ctxt);

至少有效......