2010-01-30 4 views
14

QuickLook 미리보기을 보여주는 NSView, NSImage, CGImageRef 등을 얻으려는 방법 (공개 또는 기타)을 찾고 있습니다. 본질적으로 QLThumbnailImageCreate()에 해당하지만 미리보기에는 해당됩니다.NSView 또는 NSImage에서 Mac Quick Look 미리보기?

찾을 수있는 공개 API가이 기능을 지원하지 않습니다. 썸네일 이미지 또는 QLPreviewPanel을 만들 수 있습니다. 패널은 사실 빠른보기 미리보기를 표시하지만 미리보기의 모양에 액세스하여 다른보기에 포함하거나 한 번에 여러 미리보기를 표시 할 수는 없습니다.

배경으로, 사용자가 HTML에 <img> 태그와 같은 종류의 인라인으로 표시되어야하는 다른 파일에 대한 링크를 퍼갈 수있는 앱을 작성 중입니다. JPG 및 PDF와 같은 이미지의 경우 표시 할 항목을 파악하기 쉽습니다. 필자는 다른 형식의 경우 파일의 내용을 시각적으로 표현하기 위해 훑어보기를 사용한다고 생각했습니다. 이 방법으로 내 응용 프로그램에서 지원하는 형식 집합을 쉽게 확장 할 수 있습니다 (새로운 훑어보기 생성기 만 다운로드).

답변

5

나는 이것에 대해 많은 시간을 들여다 보았고 쉽게 할 수있는 방법을 찾지 못했습니다. 파일 유형에 따라 QuickLook은 다른 종류의 출력을 생성합니다. 예를 들어 iWork 파일의 경우 생성기는 HTML을 WebView에 표시합니다. 다른 유형의 경우 다른 유형의 데이터를 반환합니다.

나는 코드를 사용하여 종료 결코, 그러나 여기 편리 할 수도 있습니다 내가 발굴 일부 코드와 일부 개인 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; 
} 
+1

당신은 또한 매트 겜멜에서이 문제를 확인 할 수 있습니다 : HTTP는 : //mattgemmell.com/2007/10/29/how-to-get-a-quick-look-preview-as-an-nsimage QLThumbnailImageCreate를 사용하여 미리보기를 만듭니다 (심지어 큼). 내가 올바르게 기억한다면, 내가 가진 문제는 첫 번째 페이지 문서에서만 작동한다는 것이다. –

+2

Matt Gemmell의 코드 제목에도 불구하고 사실 미리보기가 아닌 미리보기 이미지 만 반환됩니다. –

+0

비공개 API를 이용해 주셔서 감사합니다. 필자는이 작업을 수행하는 유일한 방법은 주어진 파일에 대한 생성기 번들을 찾아 QL 패널의 역할을 수행하여 필요에 따라 HTML, 이미지 등을 수락하는 것입니다. 애플이 변화를 일으킨다면, 해킹이 충분하지만 사소하거나 강력하지는 않을 것 같다. –