加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – 如何从组合TIFF中获取适合的CGImage用于显示比例

发布时间:2020-12-16 07:03:12 所属栏目:百科 来源:网络整理
导读:我在Mac项目中有两个PNG.正常和@ 2x. Xcode将这些组合成单个TIFF,其中@ 2x位于索引0处,@ 1x位于索引1处. 建议的方法是将适当的图像作为CGImageRef版本(与Quartz一起使用)获取当前显示比例? 我可以通过CGImageSource手动获取图像: NSBundle *mainBundle = [
我在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:]时才会这样.

编辑:在这里找到它:
http://adcdownload.apple.com//wwdc_2012/wwdc_2012_session_pdfs/session_213__introduction_to_high_resolution_on_os_x.pdf

在幻灯片中搜索关键词“best”:“NSImage自动选择最佳表示[…]”.

因此,您的第二个版本将在Retina显示屏上返回Retina版本,您可以确定它,它在文档[*]中公布.

[*]这仅在您提供有效的艺术作品时才有效.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读