我有一堆专有二进制格式的图像文件,我想加载到NSImages中。格式不是简单的位图,而是一种混合了透明度和其他附加信息的RLE表示。
为了在Cocoa应用程序中显示其中一个图像,我需要一种逐字节解析图像文件的方法,并从中“计算”一个位图,然后将其放入NSImage中。
在Objective-C / Cocoa中执行此操作的好方法是什么?
答案 0 :(得分:7)
解释图像数据的任务由图像的表示对象处理。要使用专有格式,您有以下几种选择:(a)创建自定义表示类,(b)将NSCustomImageRep
与自定义委托一起使用,或(c)使用自定义对象将图像转换为支持的格式,例如原始位图。
如果您选择创建自定义表示类,则将创建NSImageRep
的子类,如Creating New Image Representation Classes中所述。这基本上要求您的类注册自己并能够绘制图像数据。除此之外,您还可以覆盖方法以返回有关图像的信息,并且您将能够使用常规NSImage
方法实例化图像。这种方法需要最多的工作。
使用NSCustomImageRep
比创建自定义实现所需的工作少。您的委托对象只需要能够在固定位置绘制图像。但是,您无法返回有关该图像的其他信息,您需要在创建NSCustomImageRep
之前手动创建NSImage
对象。
将图像转换为其他格式也比创建自定义表示更简单。它可以像创建适当大小的空白NSImage
并绘制到它一样简单。创建图像仍然比较复杂,因为您需要调用您的翻译方法,这会影响效率(未来的绘图时间和内存使用),因为您正在更改格式,这可能是好的也可能是坏的。您还将丢失图像对象与其源之间的任何关联。