簡體   English   中英

使用github的最新版本無法在Evil Dicom中找到Open方法

[英]Can not find Open method in Evil Dicom using latest version from github

我正在嘗試按照本教程進行操作:

http://www.rexcardan.com/2014/10/evil-dicom-basics/

並處理我的DICOM文件以顯示圖像。 在本教程中,將調用DICOMObject.Open()方法來處理文件路徑。 我的問題是,intellisense無法為我解決這個問題。 有人可以協助嗎?

我下載了此版本:

https://github.com/rexcardan/Evil-DICOM

編輯

使用以下內容:

var dcm = DICOMObject.Read(@"C:\file\path\filename.dcm");

在逐步執行DICOMObject的代碼時, DICOMObject一切似乎都可以正常工作:

public static IDICOMElement ReadElementImplicitLittleEndian(DICOMBinaryReader dr)
{
    var tag = TagReader.ReadLittleEndian(dr);
    var vr = TagDictionary.GetVRFromTag(tag);
    int length = LengthReader.ReadLittleEndian(VR.Null, dr);
    var data = DataReader.ReadLittleEndian(length, dr, TransferSyntax.IMPLICIT_VR_LITTLE_ENDIAN);
    var el = ElementFactory.GenerateElement(tag, vr, data, TransferSyntax.IMPLICIT_VR_LITTLE_ENDIAN);
    return el;
}

當代碼到達:

int length = LengthReader.ReadLittleEndian(VR.Null, dr);

length返回一個1919252000 bytesint ,約為2GB。 然后,代碼將執行以下操作:

var data = DataReader.ReadLittleEndian(length, dr, TransferSyntax.IMPLICIT_VR_LITTLE_ENDIAN);

哪個檢查是否有要讀取的字節(有),然后轉到此處的讀取字節:

public byte[] ReadBytes(int count)
{
    byte[] buffer = new byte[count];
    _binaryReader.Read(buffer, 0, count);
    return buffer;
}

byte[] buffer = new byte[count]; 是代碼中實際發生異常的地方。 我已經測試了它可以處理的字節數,似乎在.6 - .7 GB ,這甚至不到我需要的一半。 是否可以擴展緩沖區以接受我需要的所有內容?

我沒有看過視頻,但據我所知您應該使用:

var dicomObj = DICOMObject.Read(filePath);

使用Evil DICOM讀取DICOM文件。

請在此處查看源代碼。 我不確定,但是最近的API更改可能解釋了這種混淆。

回復晚了非常抱歉。

我的第一個想法是該文件實際上並未在Implicit VR Little Endian中編碼。 如果缺少DICOM前導和元數據,這是默認的傳輸語法。 通常,在元數據(以0002開頭的標簽)中,會顯示傳輸語法。 在實際文件上(在Windows資源管理器中,而不是從ED),大小真的是600 + MB嗎? 如果是這樣,那是什么樣的文件,所以我可以一起玩?

我向DICOMObject類添加了一個新方法,讓您在讀取失敗時嘗試另一種語法:

    /// <summary>
    ///     Reads a DICOM file from a path
    /// </summary>
    /// <param name="filePath">the path to the file</param>
    /// <param name="trySyntax">the transfer syntax to use in case there is no metadata explicitly included</param>
    /// <returns></returns>
    public static DICOMObject Read(string filePath,
        TransferSyntax trySyntax = TransferSyntax.IMPLICIT_VR_LITTLE_ENDIAN)
    {
        return DICOMFileReader.Read(filePath, trySyntax);
    }

在我的經歷中,我遇到了一些格式錯誤的DICOM,這些錯誤導致了我所提到的錯誤。 當然,實際上可能是您的內存不足,如果您確定傳輸語法正確,我想進一步研究。 嘗試“ Explicit VR Little Endian”,看看是否可以解決您的問題。

嘗試這個

var bdcm= File.ReadAllBytes(@"AbsolutePath");
var dcm = DICOMObject.Read(bdcm);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM