建议的方法将专有二进制映像文件加载到NSImage中?

时间:2012-04-30 02:10:21

标签: objective-c cocoa

我有一堆专有二进制格式的图像文件,我想加载到NSImages中。格式不是简单的位图,而是一种混合了透明度和其他附加信息的RLE表示。

为了在Cocoa应用程序中显示其中一个图像,我需要一种逐字节解析图像文件的方法,并从中“计算”一个位图,然后将其放入NSImage中。

在Objective-C / Cocoa中执行此操作的好方法是什么?

1 个答案:

答案 0 :(得分:7)

解释图像数据的任务由图像的表示对象处理。要使用专有格式,您有以下几种选择:(a)创建自定义表示类,(b)将NSCustomImageRep与自定义委托一起使用,或(c)使用自定义对象将图像转换为支持的格式,例如原始位图。

如果您选择创建自定义表示类,则将创建NSImageRep的子类,如Creating New Image Representation Classes中所述。这基本上要求您的类注册自己并能够绘制图像数据。除此之外,您还可以覆盖方法以返回有关图像的信息,并且您将能够使用常规NSImage方法实例化图像。这种方法需要最多的工作。

使用NSCustomImageRep比创建自定义实现所需的工作少。您的委托对象只需要能够在固定位置绘制图像。但是,您无法返回有关该图像的其他信息,您需要在创建NSCustomImageRep之前手动创建NSImage对象。

将图像转换为其他格式也比创建自定义表示更简单。它可以像创建适当大小的空白NSImage并绘制到它一样简单。创建图像仍然比较复杂,因为您需要调用您的翻译方法,这会影响效率(未来的绘图时间和内存使用),因为您正在更改格式,这可能是好的也可能是坏的。您还将丢失图像对象与其源之间的任何关联。