C # gdcm грузоподъемность - PullRequest
       4

C # gdcm грузоподъемность

0 голосов
/ 06 сентября 2010

есть исключение с gdmcgdcmPinvoke.Почему?

foreach (string el in files_in_folder)
{
    try
    {
        gdcm.ImageReader reader = new gdcm.ImageReader();
        reader.SetFileName(el);

        if (reader.Read())
        {
            textBox1.Text="Image loaded"; 

            reader.GetImage() ;

            ListViewItem str = new ListViewItem(el);

            str.Text = el;

            listView1.Items.Add(str.Text);
        }
        else
        {
            textBox1.Text = "This is not a DICOM file";
        }
    }
}

1 Ответ

1 голос
/ 08 сентября 2010

Я бы посоветовал не использовать DICOM Reader для этой задачи, так как это приведет к значительным накладным расходам в процессе. Единственная причина использовать полную библиотеку DICOM в этом случае - это если вы хотите проверить все элементы файла, а также убедиться, что файл фактически является файлом DICOM.

Моим первым предложением было бы просто полагаться на расширение файла (обычно ".DCM") для первоначальной идентификации файлов DICOM. Затем, если файл не в правильном формате, сообщите пользователю, когда они пытаются открыть файл. Я не знаю других форматов файлов, использующих расширение ".DCM".

Если это неприемлемо (например, ваши файлы не имеют расширения), я проведу только минимальную проверку, требуемую для вашего конкретного случая использования. Файл DICOM всегда будет содержать преамбулу длиной 128 байт, за которой следуют буквы «DICM» (без кавычек). Вы можете заполнить преамбулу чем угодно, но байты 129-132 всегда должны содержать «DICM». Это минимальная проверка файла, я бы предложил следующее:

foreach (string el in files_in_folder)
{
    bool isDicomFile = false;
    using (FileStream fs = new FileStream(el, FileMode.Open))
    {
        byte[] b = new byte[4];
        fs.Read(b, 128, b.Length);
        ASCIIEncoding enc = new ASCIIEncoding();
        string verification = enc.GetString(b);
        if (verification == "DICM")
            isDicomFile = true;
        fs.Close();
    }
    if (isDicomFile)
        listView1.Items.Add(new ListViewItem(el));
    // I would discourage the use of this else, since even
    // if only one file in the list fails, the TextBox.Text
    // will still be set to "This is not a DICOM file".
    else
        textBox1.Text = "This is not a DICOM file";
}
...