- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一组 JPG 图像,它们实际上是 CT 扫描的切片,我想将其重建为 DICOM 图像文件并导入到 PACS 中。
我正在使用 ClearCanvas,并设置了所有必需的标签(并通过使用专有应用程序将我的一个 JPG 文件转换为 DICOM 来确认它们,以确保它们相同)。我只是不确定应该如何处理我的 JPG 文件以将其放入 PixelData 标签?
目前,根据 ClearCanvas 论坛的建议,我正在将其转换为字节数组,但图像在 DICOM 查看器中出现乱码。我应该如何处理图像数据以使其成为可读格式?
public DicomFile CreateFileFromImage(Image image)
{
int height = image.Height;
int width = image.Width;
short bitsPerPixel = (short)Image.GetPixelFormatSize(image.PixelFormat);
byte[] imageBuffer = ImageToByteArray(image);
DicomFile dicomFile = new DicomFile();
dicomFile.DataSet[DicomTags.Columns].SetInt32(0, width);
dicomFile.DataSet[DicomTags.Rows].SetInt32(0, height);
dicomFile.DataSet[DicomTags.BitsStored].SetInt16(0, bitsPerPixel);
dicomFile.DataSet[DicomTags.BitsAllocated].SetInt16(0, bitsPerPixel);
dicomFile.DataSet[DicomTags.HighBit].SetInt16(0, 7);
//other tags not shown
dicomFile.DataSet[DicomTags.PixelData].Values = imageBuffer;
return dicomFile;
}
public static byte[] ImageToByteArray(Image imageIn)
{
MemoryStream ms = new MemoryStream();
imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
return ms.ToArray();
}
最佳答案
ClearCanvas 库作为两个辅助类,可以更轻松地在 DicomFile
中编码和解码像素数据。它们是 DicomCompressedPixelData
类和 DicomUncompressedPixelData
类。您可以使用它们来设置图像的参数,并将它们编码到 DicomFile
对象中。
在您的情况下,由于您正在对压缩对象进行编码,因此您应该使用 DicomCompressedPixelData
类。类上有可以设置的属性。调用 UpdateMessage
方法会将这些属性值复制到 DicomFile
对象。此外,此类还有一个 AddFrameFragment
方法,可以正确编码像素数据。请注意,压缩像素数据必须在每个数据帧周围有一些特定的二进制包装器。这是您以前的代码中缺少的部分。下面的代码显示了如何进行设置。
short bitsPerPixel = (short)Image.GetPixelFormatSize(image.PixelFormat);
var dicomFile = new DicomFile();
var pd = new DicomCompressedPixelData(dicomFile);
pd.ImageWidth = (ushort)image.Width;
pd.ImageHeight = (ushort) image.Height;
pd.BitsStored = (ushort)bitsPerPixel;
pd.BitsAllocated = (ushort) bitsPerPixel;
pd.HighBit = 7;
pd.SamplesPerPixel = 3;
pd.PlanarConfiguration = 0;
pd.PhotometricInterpretation = "YBR_FULL_422";
byte[] imageBuffer = ImageToByteArray(image);
pd.AddFrameFragment(imageBuffer);
pd.UpdateMessage(dicomFile);
return dicomFile;
关于c# - 使用 ClearCanvas 将 JPG 图像文件编码为 DICOM PixelData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25498247/
我想从 dicomdir 读取 dicom 标签。我如何检查文件是否是 dicomdir?现在,我正在那样尝试,但我知道有些文件的名称中没有 dicomdir。 if (fi_name.Co
我正在尝试向 ClearCanvas 中的 DicomFile.DataSet 添加新标签。 我注意到有方法“DicomFile.DataSet.RemoveAttribute”但没有“AddAttr
目前我正在构建一个可以处理 DICOM 文件的小型桌面应用程序。我使用 C# 和 .NET 进行编码并使用 ClearCanvas 库。我需要做的一件事是能够显示文件的全部内容,包括所有序列。但是序列
我正在尝试从文本文件中读取 dicom 标签作为 (####,####) 并从清晰的 Canvas 库中创建相应的 DicomTag //parsing txt string to find the
我想在 C# 中为 DICOM 图像查看器使用 clearcanvas 库。我搜索了很多但不幸的是我没有找到如何设置这个库以在 C# 中与我的项目一起使用。即使在 ClearCanvas 的网站上也没
这是一个非常狭窄和具体的问题,但我知道还有其他人在使用它,所以我会保持双手交叉,并希望你们中的任何人都能提出这个问题。 我正在开发一个 WPF 应用程序,其中一部分是 Dicom 查看器。我们想使用一
我有一组 JPG 图像,它们实际上是 CT 扫描的切片,我想将其重建为 DICOM 图像文件并导入到 PACS 中。 我正在使用 ClearCanvas,并设置了所有必需的标签(并通过使用专有应用程序
我正在对数字化 ECG 数据进行 dicomizing,我想将波形标签的 VR 值设置为 OW 但在默认情况下,clearcanvas 将标签的 VR 值设置为 OB The VR value is
我是一名优秀的程序员,十分优秀!