建议的方法是将适当的图像作为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用于显示比例所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)