我对创建可以容纳双精度值的NSImageRep子类感兴趣。标准的NSBitmapImageRep可以容纳单精度浮点数,但在双精度点上会阻塞。我喜欢NSBitmapImageRep公开要处理的数据缓冲区,我想保留在适当位置处理数据的能力,而不是要处理单独的缓冲区,而我需要将其转换为图像以进行显示。

我认为子类化非常简单,只是我不确定如何处理最基本的部分:绘制图像。文档列出了-draw作为我需要实现的方法,这很有意义,但是绘制位图的最佳方法是什么?

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

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

另外,我发现有趣的是,要实现的方法只是-draw,而不是任何形式的有界绘制。有没有一种方法可以从NSImageRep中确定当前的裁剪区域,或者可以避免绘制不必要的图像部分?

最佳答案

可以肯定的是,到目前为止,您已经找到了解决此问题的方法,但是如果您仍然有兴趣,这是我的发现。

我在实现自己的NSImageRep时发现,这样做的效率很低,并且您不必仅实现非常简单的-(BOOL)draw方法。如果提供-(BOOL)drawInRect:的实现,则在大多数情况下将使用它。实际上,在我的NSImageRep子类中,当-(BOOL)draw存在时,我还没有看到-(BOOL)drawInRect:被调用。

对于实际的绘图,我一直在使用Core Graphics,它可以让您从原始数据中创建图像,并以极大的控制力和精确度对其进行绘制,而且速度非常快。我的表示还很粗糙,但是即使处理大图像也很快。

整个主题完全缺乏文档,这可能是由于在旧标准(TIFF,PNG,JPEG等)之外几乎不需要其他表示形式。进行研究非常令人沮丧,因此,如果我有时间去撰写一篇博客文章,详细介绍我所遇到的所有事情,那将是一件令人沮丧的事情。

关于objective-c - 如何为自定义NSImageRep子类实现-draw,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17585755/

10-12 00:22
查看更多