В некоторых тестах я пытаюсь манипулировать элементом PixelData
изображения КТ, хранящимся в формате dicom, и записывать его обратно в файл с помощью Fellow Oak Dicom в C #. После некоторых исследований я обнаружил, что матрица, с которой я хочу иметь дело, находится в Buffer
из PixelData
, хранящемся в массиве byte
. Поэтому я написал следующий код:
DicomFile ctFile = DicomFile.Open(image);
var pixDat = ctFile.Dataset.Get<byte[]>(DicomTag.PixelData);
for (int i = 0; i < pixData.Length; i++)
{
pixDat[i] = Convert.ToByte(200);
}
ctFile.Dataset.AddOrUpdate<byte[]>(DicomTag.PixelData, pixDat);
ctFile.Save("new file folder");
Это была моя первая попытка, и я получил Exception
по команде AddOrUpdate
, потому что она не смогла преобразовать byte
-матрицу в OB.
Чтение, например Книга Пианых о DICOM, OB означает Other Byte String . Но до сих пор я не могу преобразовать манипулированный массив byte
в OB. Когда я попробовал этот фрагмент кода:
DicomOtherByte dob = new DicomOtherByte(DicomTag.PixelData, pixDat);
ctFile.Dataset.AddOrUpdate<DicomOtherByte>(DicomTag.PixelData, dob);
Exception
все еще звонит по AddOrUpdate
из-за невозможности конвертировать предмет в OB. Ища здесь в stackoverflow, документации fo-dicom в git или в google, я до сих пор не понял, как с этим бороться. Поэтому мне интересно, как преобразовать мою управляемую матрицу в OB, потому что я думал, что DicomOtherByte
- это OB.
РЕДАКТИРОВАТЬ: Exception
«Не удается создать элемент DICOM типа OB со значениями типа Dicom.DicomOtherByte» - System.InvalidOperationException
Заранее спасибо.