如何实现-draw为自定义NSImageRep子类

时间:2013-07-11 05:34:41

标签: objective-c cocoa bitmap subclass nsimagerep

我有兴趣创建一个可以保存双精度值的NSImageRep子类。标准的NSBitmapImageRep可以保存单精度浮点数,但是双精度时会出现扼流圈。我喜欢NSBitmapImageRep暴露数据缓冲区以进行操作,我希望保留在适当的位置操作数据的能力,而不是操作我需要转换为图像进行显示的单独缓冲区。

我认为子类化是相当直接的,除了我不确定如何处理最基本的部分:绘制图像。文档列表-draw作为我需要实现的方法,这是有道理的,但绘制位图的最佳方法是什么?

我看到一个犹豫不决的建议,要绘制很多小矩形,大概每个像素一个: How to Implement Custom Image representation for NSImage

有更有效的方法吗?我看了,找不到带位图数据的自定义NSImageRep的实例 - 大多数例子使用矢量数据。

另外,我觉得有趣的是,实现的方法只是-draw,而不是任何形式的有界绘制。有没有办法确定NSImageRep中当前剪切区域是什么或者什么来避免绘制图像中不必要的部分?

1 个答案:

答案 0 :(得分:1)

我确信你已经找到了这篇文章的解决方案,但是如果你还有兴趣的话,这是我的发现。

我在实现自己的NSImageRep时发现,有许多低效的方法,而且你不一定只需要实现简单的-(BOOL)draw方法。如果您提供-(BOOL)drawInRect:的实现,则在大多数情况下将使用它。事实上,在我的NSImageRep子类中,当-(BOOL)draw出现时,我还没有看到-(BOOL)drawInRect:被调用。

对于实际绘图,我一直在使用Core Graphics,它允许您从原始数据创建图像并以极大的控制和精度绘制它,同时非常快。我的代表性仍然相当粗糙,但即使处理大型图像也很快。

整个主题严重缺乏文档,可能是由于几乎不需要旧标准之外的其他表示(TIFF,PNG,JPEG等)。如果我得到时间,我会看到撰写一篇详细介绍我遇到过的所有内容的博客文章,那么进行研究是相当令人沮丧的。