objective-c – 如何从组合TIFF中获取适合的CGImage用于显示比例
我在Mac项目中有两个PNG.正常和@ 2x.
Xcode将这些组合成单个TIFF,其中@ 2x位于索引0处,@ 1x位于索引1处.
建议的方法是将适当的图像作为CGImageRef版本(与Quartz一起使用)获取当前显示比例? 我可以通过CGImageSource手动获取图像: NSBundle *mainBundle = [NSBundle mainBundle]; NSURL *URL = [mainBundle URLForResource:@"Canvas-Bkgd-Tile" withExtension:@"tiff"]; CGImageSourceRef source = CGImageSourceCreateWithURL((__bridge CFURLRef)(URL),NULL); _patternImage = CGImageSourceCreateImageAtIndex(source,1,NULL); // index 1 is @1x,index 0 is @2x CFRelease(source); 我也发现这是有效的,但我不确定这会在Retina显示器上返回Retina版本: NSImage *patternImage = [NSImage imageNamed:@"Canvas-Bkgd-Tile.tiff"]; _patternImage = [patternImage CGImageForProposedRect:NULL context:nil hints:nil]; CGImageRetain(_patternImage); // retain image,because NSImage goes away 这个问题的一个可接受的答案是提供一个解决方案,如何从合成的多分辨率TIFF中获得CGImage,或解释为什么第二种方法在这里工作.或者需要进行哪些更改. 解决方法
我选择回答“为什么这里的第二种方法有效”.
在自2010年以来发布的WWDC视频中,他们说: ?[NSImage imageNamed:]选择可用于当前显示的最佳图像表示对象. 因此,您可能会在锁定的焦点上下文中调用此类方法(例如,在drawRect:方法或类似方法中),或者您实际上自己调用了lockFocus.无论如何,结果是你得到了最合适的图像.但只有在调用[NSImage imageNamed:]时才会这样. 编辑:在这里找到它: 在幻灯片中搜索关键词“best”:“NSImage自动选择最佳表示[…]”. 因此,您的第二个版本将在Retina显示屏上返回Retina版本,您可以确定它,它在文档[*]中公布. [*]这仅在您提供有效的艺术作品时才有效. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |