【问题标题】:Making an NSImage from an 2d array of ints从 2d 整数数组制作 NSImage
【发布时间】:2019-01-30 16:14:58
【问题描述】:

嗨,我正在开发一个程序来加载 DICOM 文件(图像的医学文件格式)并在 mac os cocoa 应用程序中显示它们。我使用 Visual Studio 在 C# 中编码。

我已经到了可以制作一个表示强度的二维整数数组的地步,没有颜色。

我不知道如何将其制作成 NSImage,以便我可以将其用作 cocoa 中的图像。

建议?

【问题讨论】:

    标签: c# cocoa nsimage


    【解决方案1】:

    有多种方法可以实现这一点,具体取决于您的需要,但“现代”方法是使用NSImage 类工厂方法:

    + (instancetype)imageWithSize:(NSSize)size flipped:(BOOL)drawingHandlerShouldBeCalledWithFlippedContext drawingHandler:(BOOL (^)(NSRect dstRect))drawingHandler;

    此方法采用块参数以及将数据转换为图像的代码,就像您将其绘制到屏幕上以实现自定义 NSView 一样。 (如果您以前从未这样做过,请从 Cocoa Drawing Guide: "Views and Drawing""Graphics Contexts" 开始。

    工厂方法很聪明(除非你的屏幕分辨率发生变化),它只会被调用一次,结果图像缓存在NSImage的表示中。

    下一个替代方案(实际上对您来说可能更容易)是将您的 int 数组转换为表示图像中像素值的 RGBA(或其他)缓冲区。这个过程首先创建一个特定的NSBitmapImageRep(这是一个“表示”对象——每个NSImage都是一个或多个表示的集合)。

    这需要对各种像素缓冲区格式进行一些研究,但也很容易做到。构建 2D 像素缓冲区表示后,您可以将其直接转换为 NSImage

    Cocoa Drawing Guide: "Creating NSImage Objects" 中解释了这些和其他技术。

    【讨论】:

      猜你喜欢
      • 2015-08-03
      • 2015-10-26
      • 1970-01-01
      • 2016-02-06
      • 1970-01-01
      • 2020-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多