如何-NSAttributedString到CGImageRef

时间:2010-04-28 14:49:52

标签: macos core-graphics cgimage nsattributedstring

我正在编写QuickLook插件。一切顺利。只是想尝试做得更好;)。 因此问题。
这是一个返回缩略图的功能,我现在正在使用它。

QLThumbnailRequestSetImageWithData(
QLThumbnailRequestRef thumbnail,
CFDataRef data,
CFDictionaryRef properties);
);

http://developer.apple.com/mac/library/documentation/UserExperience/Reference/QLThumbnailRequest_Ref/Reference/reference.html#//apple_ref/c/func/QLThumbnailRequestSetImageWithData

现在我正在创建一个TIFF - >将其封装到NSData中。一个例子

// Setting CFDataRef
CGSize thumbnailMaxSize = QLThumbnailRequestGetMaximumSize(thumbnail);
NSMutableAttributedString *attributedString = [[[NSMutableAttributedString alloc] 
                                                   initWithString:@"dummy" 
                                                   attributes:[NSDictionary dictionaryWithObjectsAndKeys:
                                                               [NSFont fontWithName:@"Monaco" size:10], NSFontAttributeName, 
                                                               [NSColor colorWithCalibratedRed:0.0 green:0.0 blue:0.0 alpha:1.0], NSForegroundColorAttributeName, 
                                                               nil]
                                                   ] autorelease];
NSImage *thumbnailImage = [[[NSImage alloc] initWithSize:NSMakeSize(thumbnailMaxSize.width, thumbnailMaxSize.height)] autorelease];
[thumbnailImage lockFocus];
[[NSColor whiteColor] set];
NSRectFill(NSMakeRect(0, 0, thumbnailMaxSize.width, thumbnailMaxSize.height));
[attributedString drawInRect:NSMakeRect(0, 0, thumbnailMaxSize.width, thumbnailMaxSize.height)];
[thumbnailImage unlockFocus];
(CFDataRef)[thumbnailImage TIFFRepresentation]; // This is data

// Setting CFDictionaryRef
(CFDictionaryRef)[NSDictionary dictionaryWithObjectsAndKeys:@"kUTTypeTIFF", (NSString *)kCGImageSourceTypeIdentifierHint, nil ]; // this is properties

然而,QuickLook提供了另一种返回缩略图的功能,即

QLThumbnailRequestSetImage(
QLThumbnailRequestRef thumbnail,
CGImageRef image,
CFDictionaryRef properties);
);

http://developer.apple.com/mac/library/documentation/UserExperience/Reference/QLThumbnailRequest_Ref/Reference/reference.html#//apple_ref/c/func/QLThumbnailRequestSetImage

我觉得将CGImage传递给QL而不是TIFF数据会有助于加快速度。 但是 - 我以前从未使用过CG上下文。我知道,文档在那里:),但无论如何 - 任何人都可以举例说明如何将NSAttributed字符串转换为CGImageRef。一个例子值得10次阅读文档;)
任何帮助赞赏。提前谢谢!

1 个答案:

答案 0 :(得分:0)

  

任何人都可以举例说明如何将NSAttributed字符串转换为CGImageRef。

您无法将字符串转换为图像;它们是两种完全不同的数据,一种是二维(随时间变化的字符),另一种是至少三维的(x和y上的颜色)。

您需要做的是绘制字符串并生成图形图像。这就是你现在用NSImage做的事情:创建一个图像并将字符串绘制到其中。

你问的是创建一个CGImage。创建bitmap context,使用Core Text将字符串绘制到其中,并创建位图上下文内容的图像是一种方法。

但是,假设您需要Snow Leopard,那么您已经更接近另一种解决方案了。而不是向NSImage询问TIFF表示,ask it for a CGImage