我正在编写QuickLook插件。一切顺利。只是想尝试做得更好;)。
因此问题。
这是一个返回缩略图的功能,我现在正在使用它。
QLThumbnailRequestSetImageWithData(
QLThumbnailRequestRef thumbnail,
CFDataRef data,
CFDictionaryRef properties);
);
现在我正在创建一个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);
);
我觉得将CGImage传递给QL而不是TIFF数据会有助于加快速度。
但是 - 我以前从未使用过CG上下文。我知道,文档在那里:),但无论如何 - 任何人都可以举例说明如何将NSAttributed字符串转换为CGImageRef。一个例子值得10次阅读文档;)
任何帮助赞赏。提前谢谢!
答案 0 :(得分:0)
任何人都可以举例说明如何将NSAttributed字符串转换为CGImageRef。
您无法将字符串转换为图像;它们是两种完全不同的数据,一种是二维(随时间变化的字符),另一种是至少三维的(x和y上的颜色)。
您需要做的是绘制字符串并生成图形图像。这就是你现在用NSImage做的事情:创建一个图像并将字符串绘制到其中。
你问的是创建一个CGImage。创建bitmap context,使用Core Text将字符串绘制到其中,并创建位图上下文内容的图像是一种方法。
但是,假设您需要Snow Leopard,那么您已经更接近另一种解决方案了。而不是向NSImage询问TIFF表示,ask it for a CGImage。