C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了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:]时才会这样.

编辑:在这里找到它:
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用于显示比例所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。