【问题标题】:How to implement -draw for custom NSImageRep subclass如何为自定义 NSImageRep 子类实现 -draw
【发布时间】:2013-07-11 05:34:41
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: objective-c cocoa bitmap subclass nsimagerep


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-04
      • 1970-01-01
      • 1970-01-01
      • 2020-05-15
      • 2023-03-03
      • 1970-01-01
      • 2013-07-22
      相关资源
      最近更新 更多