【发布时间】:2019-01-30 16:14:58
【问题描述】:
嗨,我正在开发一个程序来加载 DICOM 文件(图像的医学文件格式)并在 mac os cocoa 应用程序中显示它们。我使用 Visual Studio 在 C# 中编码。
我已经到了可以制作一个表示强度的二维整数数组的地步,没有颜色。
我不知道如何将其制作成 NSImage,以便我可以将其用作 cocoa 中的图像。
建议?
【问题讨论】:
嗨,我正在开发一个程序来加载 DICOM 文件(图像的医学文件格式)并在 mac os cocoa 应用程序中显示它们。我使用 Visual Studio 在 C# 中编码。
我已经到了可以制作一个表示强度的二维整数数组的地步,没有颜色。
我不知道如何将其制作成 NSImage,以便我可以将其用作 cocoa 中的图像。
建议?
【问题讨论】:
有多种方法可以实现这一点,具体取决于您的需要,但“现代”方法是使用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" 中解释了这些和其他技术。
【讨论】: