如何在iOS Objective - C中创建(DICOM).dcm文件?

时间:2017-01-02 10:17:11

标签: ios objective-c xcode dicom

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

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

1 个答案:

答案 0 :(得分:2)

更新:Imebra 4.2包含完整的ObjectiveC包装器,它也适用于Swift。

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

它也适用于iOS和OS-X,它是用C ++编写的,但如果文件的扩展名为.mm而不是.m

,它可以与ObjectiveC方法一起使用

从版本4.0.8.1开始,Imebra还包含很少objectiveC helpers将C ++字符串转换为NSStrings(反之亦然)并从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的作者)