我对创建一个可以保存双精度值的NSImageRep子类很感兴趣。标准NSBitmapImageRep可以容纳单精度浮点数,但在双精度浮点数上会出现瓶颈。我喜欢NSBitmapImageRep公开用于操作的数据缓冲区,并且我希望保留操作数据的能力,而不是操作需要转换为图像以进行显示的单独缓冲区。
我认为子类化是相当简单的,除了我不确定如何处理最基本的部分:绘制图像。文档将-draw列为我需要实现的方法,这是有道理的,但是绘制位图的最佳方法是什么呢?
我看到一个犹豫不决的建议,要画很多小矩形,大概每个像素一个:How to Implement Custom Image representation for NSImage
有没有更有效的方法?我找过,但找不到使用位图数据的自定义NSImageRep的工作示例--大多数示例使用矢量数据。
此外,我发现有趣的是,要实现的方法是简单的-draw,而不是任何形式的有界绘制。有没有一种方法可以从NSImageRep或其他东西中确定当前剪切区域是什么,以避免绘制不必要的图像部分?
发布于 2014-06-22 10:33:32
我相信你已经为这篇文章找到了解决方案,但如果你仍然感兴趣的话,这是我的发现。
在实现我自己的NSImageRep时,我发现有许多效率低下的方法,而且您不必只实现非常简单的-(BOOL)draw方法。如果您提供了-(BOOL)drawInRect:的实现,则在大多数情况下都会使用它。事实上,在我的NSImageRep子类中,我还没有看到-(BOOL)draw在-(BOOL)drawInRect:出现时被调用。
对于实际的绘图,我一直在使用Core Graphics,它允许您从原始数据创建图像,并以极高的控制力和精确度绘制它,所有这些都非常快。我的表示仍然相当粗糙,但即使在处理大图像时也很快。
整个主题非常缺乏文档,可能是因为除了旧标准(TIFF、PNG、JPEG等)之外几乎不需要额外的表示。做研究是相当令人沮丧的,所以如果我有时间,我会考虑写一篇博客文章,详细介绍我遇到的一切。
https://stackoverflow.com/questions/17585755
复制相似问题