如果我通过以下内容创建NSImage
:
NSImage *icon = [NSImage imageNamed:NSImageNameUser];
它只有一个表示,NSCoreUIImageRep
似乎是私人类。
我想将此图片归档为NSData
,但如果我要求TIFFRepresentation
我得到了
我最初创建的真实NSImage
似乎是矢量的小图标,可以扩展以很好地填充我的图像视图。
我有点希望以这种方式制作的图像会有NSPDFImageRep
我可以使用。
任何想法如何才能获得此NSData
的{{1}}(矢量版本或更大的位图版本)?
更新
与一些人on Twitter说话,他们建议这些图像的真正来源是多分辨率icns文件(可能根本不是矢量)。我无法在磁盘上找到这些位置,但听到的却很有趣。
此外,他们建议我创建系统NSImage并手动将其渲染为我自己的高分辨率NSImage。我现在正在这样做,它正在满足我的需求。我的代码:
NSImage
(试图发布这个作为我的答案,但我没有足够的声誉?)
答案 0 :(得分:4)
您似乎忽略了文档。你的两个主要问题都在那里得到解答。 Cocoa Drawing Guide(从NSImage API参考链接的伴随指南)有一个图像部分,您需要仔细阅读并参考任何时候您有rep / caching / sizing / quality问题。
...如果我要求TIFFRepresentation,我会得到一个小图标 我最初创建的真正的NSImage似乎是矢量并且可以扩展 最好能很好地填充我的图像视图。
此问题的图像部分的相关小节是:如何选择图像表示,图像和缓存,以及图像大小和分辨率。默认情况下,TIFF图像的-cacheMode“就像NSImageCacheBySize设置有效一样。”此外,对于内存中缩放/大小调整操作,-imageInterpolation很重要:“表6-4列出了可用的插值设置。”和“NSImageInterpolationHigh - 更慢,更高质量的插值。”
我很确定这适用于指定的系统映像以及任何其他映像。
我有点希望[通过从磁盘加载图像]制作的图像 有一个我可以使用的NSPDFImageRep。
相关小节:图像表示。 “......使用基于文件的图像,您创建的大多数图像只需要一个图像表示。”并且“您可能会在以下情况下创建多个表示形式,但是:对于打印,您可能需要创建图像的PDF表示或高分辨率位图。”
您将获得适合加载图像的表示。例如,您必须为TIFF图像创建PDF表示。要以高分辨率执行此操作,您需要返回缓存模式,以便获得更高分辨率的项目。
由于图像/创建机制/设置的大量排列/以及您想要用它们做什么,因此有很多很多的精细细节无法列出。我的帖子旨在成为查找您所需的具体信息的一般指南。
有关更多详细信息,请添加特定详细信息:您尝试使用的代码,您正在加载或创建的图像类型 - 您似乎在第四段中提到了两种不同的可能性 - 以及出了什么问题。
答案 1 :(得分:0)
我猜想图像以某种方式“硬连线”进入图形系统,而它的NSImage表示只是一个数字,表示它是哪个硬连线图形。您可能需要做的就是绘制它然后捕获绘图。
通常,创建一个视图控制器来渲染图像,引用VC的view
属性以使视图呈现,提取VC的contentView
,得到{{1} },将contentView.layer
渲染到UIGraphics上下文中,从上下文中获取layer
,从UIImage中提取您想要的任何表示。
(可能有一种更简单的方法,但这是我最终在一个案例中使用的方式。)
(并且,叹了口气,我想这个方案也没有保留缩放。)