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