Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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
Cocoa NSView或NSImage中的Mac Quick Look预览?_Cocoa_Macos_Quicklook - Fatal编程技术网

Cocoa NSView或NSImage中的Mac Quick Look预览?

Cocoa NSView或NSImage中的Mac Quick Look预览?,cocoa,macos,quicklook,Cocoa,Macos,Quicklook,我正在寻找一种方式(公开或其他方式)来获取NSView、NSImage、CGImageRef等,其中显示文件的快速查看预览。本质上相当于QLThumbnailImageCreate(),但用于预览 我能找到的公共API不支持这一点。它们允许创建缩略图或QLPreviewPanel。该面板实际上显示了“快速查看预览”,但我无法访问预览的外观以将其嵌入到其他视图中,也无法同时显示多个预览 作为背景,我正在编写一个应用程序,用户可以在其中嵌入指向其他文件的链接,这些文件应该以内联方式显示,有点像HTM

我正在寻找一种方式(公开或其他方式)来获取NSView、NSImage、CGImageRef等,其中显示文件的快速查看预览。本质上相当于QLThumbnailImageCreate(),但用于预览

我能找到的公共API不支持这一点。它们允许创建缩略图或QLPreviewPanel。该面板实际上显示了“快速查看预览”,但我无法访问预览的外观以将其嵌入到其他视图中,也无法同时显示多个预览


作为背景,我正在编写一个应用程序,用户可以在其中嵌入指向其他文件的链接,这些文件应该以内联方式显示,有点像HTML中的标记。对于JPG和PDF等图像,很容易确定要显示什么。我认为对于其他格式,我将使用Quick Look生成文件内容的良好视觉表示。这样,我的应用程序支持的格式集就可以很容易地扩展(只需下载新的Quick Look generators)。

我以前曾对此进行过广泛的研究,但没有找到一种简单的方法。根据文件的类型,QuickLook会生成不同类型的输出。例如,对于iWork文件,生成器生成在WebView中显示的HTML。对于其他类型,它返回不同类型的数据

我从未使用过这些代码,但以下是我挖掘的一些代码和一些可能很方便的私有API:

id QLPreviewCreate(CFAllocatorRef allocator, CFURLRef url,  CFDictionaryRef options);
id QLPreviewCopyBitmapImage(id preview);
id QLPreviewCopyData(id preview);
NSString* QLPreviewGetPreviewType(id preview);
id QLPreviewCopyProperties(id preview);

- (NSData *)getDataForFile:(NSString *)path
{

    NSURL *fileURL = [NSURL fileURLWithPath:path];

    id preview = QLPreviewCreate(kCFAllocatorDefault, fileURL, 0);

    if (preview)
    {
        NSString* previewType = QLPreviewGetPreviewType(preview);

        if ([previewType isEqualToString:@"public.webcontent"])
        {
            // this preview is HTML data
            return QLPreviewCopyData(preview);
        }
        else
        {
           NSLog(@"this type is: %@", previewType);
           // do something else
        }

    }

    return nil;
}

您可能还想从Matt Gemmell那里了解这一点:它使用QLThumbnailImageCreate创建预览(甚至更大)。如果我没记错的话,我遇到的问题是,它只适用于第一页文档。尽管代码的标题来自Matt Gemmell,但它实际上只返回缩略图,而不是预览。感谢私人API。。。那些看起来很有用。我认为唯一可行的方法是找到给定文件的生成器包,然后扮演QL面板的角色,根据需要接受HTML、图像等。如果苹果做出了改变,那么黑客攻击似乎是可行的,但不是微不足道的,也不是特别强大。如果你使用我列出的API,你不需要直接使用生成器。如果你运气好,请告诉我。