【问题标题】:How to create (DICOM) .dcm file in iOS Objective - C?如何在 iOS Objective-C 中创建(DICOM).dcm 文件?
【发布时间】:2017-05-16 10:39:44
【问题描述】:

DICOM - 医学数字成像和通信,是用于处理、存储、打印和传输医学成像信息的标准。它包括文件格式定义和网络通信协议。

我想在我的 ios 项目中编写 .dcm 文件。 请建议我任何链接。

【问题讨论】:

  • 如果你会使用 Objective-C++ 你可以看看GDCM
  • 是的,我正在寻找那个

标签: ios objective-c xcode dicom


【解决方案1】:

更新:Imebra 4.2 包含一整套 ObjectiveC 包装器,它们也适用于 Swift。

原答案Imebra 允许在 iOS 上读取和生成 DICOM 文件。

它也可以为 iOS 和 OS-X 编译,它是用 C++ 编写的,但如果文件的扩展名是 .mm 而不是 .m,它可以与 ObjectiveC 方法一起使用

从 4.0.8.1 版开始,Imebra 还包含少量 objectiveC helpers,可将 C++ 字符串转换为 NSString(反之亦然)并从 Imebra 图像中提取 UIImage(或 NSImage)

如何在 Imebra (detailed instructions) 中生成 DICOM 文件:

创建一个空数据集:

// We specify the transfer syntax and the charset
std::string transferSyntax(imebra::NSStringToString(@"1.2.840.10008.1.2.1"));
std::string encoding(imebra::NSStringToString(@"ISO 2022 IR 6"));
imebra::DataSet dataSet(transferSyntax, encoding);

创建一张图片,放入数据集中:

// Create a 300 by 200 pixel image, 15 bits per color channel, RGB
std::string colorSpace(imebra::NSStringToString(@"RGB"));
imebra::Image image(300, 200, imebra::bitDepth_t::depthU16, colorSpace, 15);

{
    std::unique_ptr<WritingDataHandlerNumeric> dataHandler(image.getWritingDataHandler());

    // Set all the pixels to red
    for(std::uint32_t scanY(0); scanY != 200; ++scanY)
    {
        for(std::uint32_t scanX(0); scanX != 300; ++scanX)
        {
            dataHandler->setUnsignedLong((scanY * 300 + scanX) * 3, 65535);
            dataHandler->setUnsignedLong((scanY * 300 + scanX) * 3 + 1, 0);
            dataHandler->setUnsignedLong((scanY * 300 + scanX) * 3 + 2, 0);
        }
    }

    // dataHandler will go out of scope and will commit the data into the image
}

dataSet.setImage(0, image);

保存数据集

std::string fileName(NSStringToString(@"path/to/file.dcm"));
imebra::CodecFactory::save(dataSet, fileName, imebra::codecType_t::dicom);

(声明:我是 Imebra 的作者)

【讨论】:

  • 如何在 Xcode 中使用 Imebra,在 iOS 项目中构建 imebra 应该使用什么步骤?
  • 根据您的 imebra for iOS 文档,我通过 cmake 成功构建了 imebra,现在应该采取什么步骤,谢谢
  • 在 cmake 构建后我得到 libimebra.a 并且我将此库添加到我的项目中,但是当我导入或包含 imebra/imebra.h 时,can't found imebra/imebra.h
  • @Apogee Swift 代码可以调用用 ObjectiveC 编写的类的方法(参见此处stackoverflow.com/questions/24002369/…),而 ObjectiveC 代码可以调用用 C++ 编写的方法。由于 Swift 不能直接调用 C++ 代码,因此对于所有需要的 C++ 类,必须编写一个 ObjectiveC 类:ObjectiveC 类只会调用对应的 C++ 代码并返回
猜你喜欢
  • 1970-01-01
  • 2015-05-08
  • 1970-01-01
  • 2010-12-14
  • 1970-01-01
  • 2020-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多