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

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

概述我在Mac项目中有两个PNG.正常和@ 2x. Xcode将这些组合成单个TIFF,其中@ 2x位于索引0处,@ 1x位于索引1处. 建议的方法是将适当的图像作为CGImageRef版本(与Quartz一起使用)获取当前显示比例? 我可以通过CGImageSource手动获取图像: NSBundle *mainBundle = [NSBundle mainBundle];NSURL *URL = 我在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 @2xCFRelease(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版本,您可以确定它,它在文档[*]中公布.

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

总结

以上是内存溢出为你收集整理的objective-c – 如何从组合TIFF中获取适合的CGImage用于显示比例全部内容,希望文章能够帮你解决objective-c – 如何从组合TIFF中获取适合的CGImage用于显示比例所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1226449.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存