1

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

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

我看到一个犹豫的建议是画很多小矩形,大概每个像素一个: 如何为 NSImage 实现自定义图像表示

有没有更有效的方法?我已经查看并找不到带有位图数据的自定义 NSImageRep 的工作示例——大多数示例使用矢量数据。

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

4

1 回答 1

1

我相信你已经找到了这篇文章的解决方案,但如果你仍然感兴趣,这里是我的发现。

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

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

整个主题严重缺乏文档,可能是因为在旧标准(TIFF、PNG、JPEG 等)之外几乎不需要额外的表示。做研究是相当令人沮丧的,所以如果我有时间,我会写一篇博客文章,详细说明我遇到的所有事情。

于 2014-06-22T02:33:32.253 回答