类 DicomImage

DicomImage class

此类实现了医学数字成像与通信 (DICOM) 栅格图像格式的支持,并提供了一个全面的解决方案,用于精确且灵活地处理 DICOM 图像。您可以无缝操作图像页,包括获取、添加或删除页面,以及控制默认页和活动页。它具备处理 alpha 通道、嵌入 XMP 元数据、调整大小、旋转、裁剪、二值化、调节、应用过滤器以及转换为其他栅格格式的能力。此 API 使开发者能够有效地处理 DICOM 图像,同时满足医学影像领域中多样化的应用需求。

public sealed class DicomImage : RasterCachedMultipageImage, IMultipageImageExt

构造函数

名称描述
DicomImage(Stream)通过在此构造函数中使用 stream 参数创建 DicomImage 类的新实例。非常适合希望从现有数据流中以简化方式初始化 DicomImage 对象的开发人员。
DicomImage(Stream, LoadOptions)通过在此构造函数中使用 stream 和 loadOptions 参数,顺利初始化 DicomImage 类的新实例。非常适合渴望在项目中快速且高效使用 DicomImage 对象的开发人员。
DicomImage(DicomOptions, int, int)使用此构造函数轻松初始化 DicomImage 类的新实例,利用 dicomOptions 参数。非常适合希望在项目中快速高效地使用 DicomImage 对象的开发者。

属性

名称描述
ActivePage { get; set; }使用此直观属性管理图像的活动页。非常适合希望在多页图像中动态切换页面、确保高效导航和处理的开发者。
ActivePageIndex { get; }使用此直观属性轻松获取活动页的索引。非常适合希望快速访问多页图像中当前页索引、确保高效导航和处理的开发者。
AutoAdjustPalette { get; set; }获取或设置指示是否自动调整调色板的值。
override BackgroundColor { get; set; }获取或设置背景颜色的值。
override BitsPerPixel { get; }获取图像的每像素位数。
Bounds { get; }获取图像的边界。
BufferSizeHint { get; set; }获取或设置缓冲区大小提示,该提示定义了所有内部缓冲区的最大允许大小。
Container { get; }获取 Image 容器。
DataStreamContainer { get; }获取对象的数据流。
DicomPages { get; }使用此直观属性访问图像的页面。非常适合希望与图像中的各个页面交互、确保无缝导航和操作的开发者。
Disposed { get; }获取一个值,指示此实例是否已释放。
ExifData { get; set; }获取或设置 Exif 数据。
override FileFormat { get; }使用此直观属性轻松检索文件格式值。非常适合希望快速获取图像文件格式、并根据文件类型进行高效处理的开发者。
FileInfo { get; }使用此直观属性轻松检索 DICOM 文件中的重要头信息。非常适合希望快速获取 DICOM 文件中封装的关键细节、确保高效数据提取和分析的开发者。
override HasAlpha { get; }使用此直观属性轻松获取图像是否具有 alpha 通道。非常适合希望确定图像是否包含透明度信息、在图像处理任务中精确处理 alpha 通道数据的开发者。
virtual HasBackgroundColor { get; set; }获取或设置指示图像是否具有背景颜色的值。
override HasTransparentColor { get; }获取指示图像是否具有透明颜色的值。
override Height { get; }获取图像高度。
virtual HorizontalResolution { get; set; }获取或设置此 RasterImage 的水平分辨率(每英寸像素数)。
override ImageOpacity { get; }获取此图像的不透明度。
InterruptMonitor { get; set; }获取或设置中断监视器。
override IsCached { get; }获取指示图像数据当前是否已缓存的值。
IsRawDataAvailable { get; }获取指示是否可进行原始数据加载的值。
override Metadata { get; }获取或设置帧的 XMP 数据。
override PageCount { get; }使用此直观属性检索图像的总页数。非常适合希望快速获取图像页数、确保高效导航和管理的开发者。
virtual PageExportingAction { get; set; }获取或设置页面导出操作。请注意,设置此方法后将在执行后自动释放页面资源。它将在每个页面保存之前执行。
override Pages { get; }使用此直观属性访问图像的页面。非常适合希望与图像中的各个页面交互、确保无缝导航和操作的开发者。
Palette { get; set; }获取或设置颜色调色板。当像素直接表示时,调色板不被使用。
virtual PremultiplyComponents { get; set; }获取或设置一个值,指示图像组件是否必须预乘。
RawCustomColorConverter { get; set; }获取或设置自定义颜色转换器
virtual RawDataFormat { get; }获取原始数据格式。
RawDataSettings { get; }获取当前原始数据设置。注意,使用这些设置时数据将在不进行转换的情况下加载。
RawFallbackIndex { get; set; }获取或设置调色板索引超出范围时使用的回退索引
RawIndexedColorConverter { get; set; }获取或设置索引颜色转换器
virtual RawLineSize { get; }获取原始行大小(字节)。
Size { get; }获取图像尺寸。
virtual TransparentColor { get; set; }获取图像透明颜色。
virtual UpdateXmpData { get; set; }获取或设置一个值,指示是否更新 XMP 元数据。
override UsePalette { get; }获取一个值,指示是否使用图像调色板。
virtual UseRawData { get; set; }获取或设置一个值,指示在可用原始数据加载时是否使用原始数据加载。
virtual VerticalResolution { get; set; }获取或设置此 RasterImage 的垂直分辨率(每英寸像素数)。
override Width { get; }获取图像宽度。
XmpData { get; set; }获取或设置 Xmp 数据。

方法

名称描述
AddPage()使用此简便方法在图像的页面列表末尾追加新页面。非常适合希望动态扩展多页图像的开发者,确保图像内容的无缝集成和组织。
AddPage(RasterImage)通过此直观方法添加新页面,扩展您的图像集合。非常适合希望动态向多页图像追加页面的开发者,确保图像内容的无缝扩展和组织。
override AdjustBrightness(int)通过调整 brightness(亮度)来增强图像亮度,这是一种参数化方法,允许开发者精细调节图像的光度。此用户友好功能使开发者能够无缝操作图像亮度,提供对视觉美感的灵活性和控制。
override AdjustContrast(float)使用此用户友好方法增强 Image 对比度,该方法调整明暗区域之间的差异。轻松提升视觉清晰度和细节,为开发者提供直观的图像对比度控制,以实现最佳渲染。
override AdjustGamma(float)通过伽马校正提升图像质量并进行调整,这是一种用于细调视觉外观的强大技术。非常适合旨在优化图像呈现、调整色彩平衡并确保在不同设备和环境中实现一致渲染的开发者。
override AdjustGamma(float, float, float)通过对图像的红、绿、蓝分量独立应用伽马校正,实现精确的颜色调整。此方法确保准确的色彩平衡和最佳的视觉输出,满足寻求对图像渲染和颜色精度进行细粒度控制的开发者需求。
override AnalyzePercentageDigitalSignature(string)计算提取数据与原始密码之间的相似度百分比。
override AutoBrightnessContrast()对整幅图像执行自动自适应亮度和对比度归一化。
AutoRotate()自动根据从 Exif 元数据提取的方向数据旋转图像。此方法确保图像以正确的方向显示,提升用户体验并消除手动调整的需求。通过分析 Exif 信息,图像相应地被旋转,提供跨平台和设备的无缝观看体验。此自动旋转过程简化了图像处理,并在处理大量方向各异的图像时提升整体可用性。
override BinarizeBradley(double)使用 Bradley 自适应阈值算法和积分图阈值对图像进行二值化
override BinarizeBradley(double, int)使用 Bradley 自适应阈值算法进行图像二值化,利用积分图阈值提升性能。适用于希望根据局部亮度变化自动分割图像的开发者,确保在不同光照条件下实现准确的目标检测和提取。
override BinarizeFixed(byte)使用此简便方法通过预定义阈值轻松将图像转换为二进制格式。适用于希望通过根据指定强度水平将图像分割为前景和背景来简化图像处理任务的开发者。
override BinarizeOtsu()应用 Otsu 阈值法对图像进行二值化,自动根据图像直方图确定最佳阈值。非常适合希望以最少人工干预将图像分割为前景和背景区域的开发者。
Blend(Point, RasterImage, byte)将此图像实例与 overlay 图像混合。
override Blend(Point, RasterImage, Rectangle, byte)将此图像实例与 overlay 图像混合。
override CacheData()此方法高效缓存数据,优化性能并在需要时确保快速访问。适用于希望通过智能管理数据资源来提升应用程序速度和效率的开发者。
CanSave(ImageOptionsBase)确定图像是否可以保存为传入保存选项所表示的指定文件格式。
override Crop(Rectangle)使用此简易方法裁剪图像,去除不需要的区域并聚焦核心内容。适用于希望自定义图像视觉构图、确保有效传达预期信息的开发者。
override Crop(int, int, int, int)通过此多功能方法应用位移来调整图像的裁剪区域。非常适合需要对裁剪过程进行精确控制、在保留重要细节的同时去除不必要元素的开发者。
Dispose()释放当前实例。
Dither(DitheringMethod, int)对当前图像执行抖动处理。
override Dither(DitheringMethod, int, IColorPalette)使用此简便方法对当前图像应用抖动效果以进行增强。非常适合希望为图像添加纹理和深度、提升视觉质量和整体吸引力的开发者。
override EmbedDigitalSignature(string)根据提供的密码将数字签名嵌入图像的每一页。
override Filter(Rectangle, FilterOptionsBase)轻松通过对指定矩形区域应用滤镜来增强图像的特定区域。此方法为开发者提供对图像操作的精确控制,轻松实现针对性调整,以达到期望的视觉效果。
GetArgb32Pixel(int, int)获取图像的 32 位 ARGB 像素。
GetDefaultArgb32Pixels(Rectangle)获取默认的 32 位 ARGB 像素数组。
virtual GetDefaultOptions(object[])获取默认选项。
GetDefaultPixels(Rectangle, IPartialArgb32PixelLoader)使用部分像素加载器获取默认像素数组。
GetDefaultRawData(Rectangle, RawDataSettings)获取默认原始数据数组。
GetDefaultRawData(Rectangle, IPartialRawDataLoader, RawDataSettings)使用部分像素加载器获取默认原始数据数组。
virtual GetModifyDate(bool)获取资源图像最近修改的日期和时间。
virtual GetOriginalOptions()根据原始文件设置获取选项。这有助于保持原始图像的位深度和其他参数不变。例如,如果我们加载一幅每像素 1 位的黑白 PNG 图像,然后使用 Save 方法保存,输出的 PNG 图像将是每像素 8 位。为避免这种情况并以每像素 1 位保存 PNG 图像,请使用此方法获取相应的保存选项,并将其作为第二个参数传递给 Save 方法。
GetPixel(int, int)获取图像像素。
override GetSerializedStream(ImageOptionsBase, Rectangle, out int)转换为 aps。
GetSkewAngle()获取倾斜角度。此方法适用于扫描的文本文档,用于在扫描时确定倾斜角度。
override Grayscale()轻松将图像转换为灰度表示,简化视觉分析和处理任务。非常适合希望提升图像清晰度、降低复杂度并促进高效基于灰度的算法在各种应用中使用的开发者。
InsertPage(int)使用此直观方法在图像的页面列表中指定索引处插入新页面。非常适合希望对多页图像的页面排列进行精确控制,确保图像内容的无缝组织和自定义的开发者。
override IsDigitalSigned(string, int)快速检查图像是否已数字签名,使用提供的密码和阈值。
LoadArgb32Pixels(Rectangle)加载 32 位 ARGB 像素。
LoadArgb64Pixels(Rectangle)加载 64 位 ARGB 像素。
LoadCmyk32Pixels(Rectangle)加载 CMYK 格式的像素。
LoadPartialArgb32Pixels(Rectangle, IPartialArgb32PixelLoader)按包部分加载 32 位 ARGB 像素。
LoadPartialArgb64Pixels(Rectangle, IPartialArgb64PixelLoader)按包部分加载 64 位 ARGB 像素。
LoadPartialPixels(Rectangle, IPartialPixelLoader)按包部分加载像素。
LoadPixels(Rectangle)加载像素。
LoadRawData(Rectangle, RawDataSettings, IPartialRawDataLoader)加载原始数据。
LoadRawData(Rectangle, Rectangle, RawDataSettings, IPartialRawDataLoader)加载原始数据。
NormalizeAngle()归一化角度。此方法适用于扫描的文本文档,以消除倾斜扫描。此方法使用GetSkewAngleRotate 方法。
override NormalizeAngle(bool, Color)归一化角度。此方法适用于扫描的文本文档,以消除倾斜扫描。此方法使用GetSkewAngleRotate 方法。
override NormalizeHistogram()归一化图像直方图——调整像素值以使用全部可用范围。
ReadArgb32ScanLine(int)按指定的扫描线索引读取整条扫描线。
ReadScanLine(int)按指定的扫描线索引读取整条扫描线。
override RemoveMetadata()通过将此XmpData 值设为 null 来移除此图像实例的元数据。
RemovePage(int)使用此便捷方法从页面列表中删除指定索引处的页面。非常适合希望对多页图像的管理进行精确控制,确保图像内容的无缝组织和自定义的开发者。
ReplaceColor(Color, byte, Color)将一种颜色替换为另一种颜色,允许差异并保留原始 alpha 值以保持平滑边缘。
override ReplaceColor(int, byte, int)将一种颜色替换为另一种颜色,允许差异并保留原始 alpha 值以保持平滑边缘。
ReplaceNonTransparentColors(Color)将所有非透明颜色替换为新颜色,并保留原始 alpha 值以保持平滑边缘。注意:如果在没有透明度的图像上使用,它将把所有颜色替换为单一颜色。
override ReplaceNonTransparentColors(int)将所有非透明颜色替换为新颜色,并保留原始 alpha 值以保持平滑边缘。注意:如果在没有透明度的图像上使用,它将把所有颜色替换为单一颜色。
Resize(int, int)调整图像大小。默认使用 NearestNeighbourResample。
override Resize(int, int, ImageResizeSettings)使用此简单的调整大小方法调整图像尺寸。无论是需要缩小还是放大图像,此函数都能高效、准确地满足您的调整需求,使其成为寻求快速简便图像尺寸调整的开发者的理想选择。
override Resize(int, int, ResizeType)使用此直接的方法调整图像尺寸。非常适合希望动态调整图像大小,使其在应用程序的各种上下文和布局中无缝适配的开发者。
ResizeHeightProportionally(int)按比例调整高度。默认使用 NearestNeighbourResample。
virtual ResizeHeightProportionally(int, ImageResizeSettings)按比例调整高度。
override ResizeHeightProportionally(int, ResizeType)使用此用户友好的方法在保持宽高比的同时调整图像高度。非常适合希望在动态调整图像大小时保持比例的开发者,确保在其应用中实现最佳显示和可用性。
ResizeProportional(int, int, ResizeType)使用此便捷方法在保持宽高比的情况下调整图像大小。适用于希望按比例调整图像尺寸的开发者,确保一致性并保留原始内容的比例。比例缩放将根据 newWidth/width 和 newHeight/height 的比率来调整每帧的大小。
ResizeWidthProportionally(int)按比例调整宽度。使用默认的 NearestNeighbourResample。
virtual ResizeWidthProportionally(int, ImageResizeSettings)按比例调整宽度。
override ResizeWidthProportionally(int, ResizeType)使用此便捷方法在保持宽高比的情况下调整图像宽度。适用于希望按比例缩放图像的开发者,确保在不同显示环境中获得一致且视觉上令人满意的效果。
override Rotate(float)围绕中心旋转图像。
override Rotate(float, bool, Color)使用此便捷方法围绕中心旋转图像。适用于希望动态调整图像方向的开发者,确保在应用程序中实现最佳展示和对齐。
override RotateFlip(RotateFlipType)使用此简洁方法轻松对活动帧进行旋转、翻转或同时执行两者操作。适用于需要在图像序列中动态调整特定帧方向的开发者,确保最佳展示和对齐。
Save()将图像数据保存到底层流。
Save(Stream)将对象的数据保存到指定的流。
override Save(string)将图像保存到指定的文件位置。
Save(Stream, ImageOptionsBase)根据保存选项,将图像数据以指定的文件格式保存到指定的流中。
virtual Save(string, bool)将对象的数据保存到指定的文件位置。
virtual Save(string, ImageOptionsBase)根据保存选项,将对象的数据以指定的文件格式保存到指定的文件位置。
override Save(Stream, ImageOptionsBase, Rectangle)使用此便捷方法轻松将图像数据保存到指定流中的所需文件格式。无论是 JPEG、PNG 还是其他格式,此函数都能确保图像数据高效、准确地保存,非常适合希望简化文件保存流程的开发者。
virtual Save(string, ImageOptionsBase, Rectangle)根据保存选项,将对象的数据以指定的文件格式保存到指定的文件位置。
SaveAll(string, ImageOptionsBase)通过将对象的数据保存到指定的文件(索引器+文件名)位置,并使用指定的文件格式和选项来保留数据。适用于希望在多种格式中安全存储数据,同时保持对保存参数的灵活性和控制的开发者。
SaveArgb32Pixels(Rectangle, int[])保存 32 位 ARGB 像素。
SaveCmyk32Pixels(Rectangle, int[])保存像素。
SavePixels(Rectangle, Color[])保存像素。
SaveRawData(byte[], int, Rectangle, RawDataSettings)保存原始数据。
SetArgb32Pixel(int, int, int)为指定位置设置图像的 32 位 ARGB 像素。
override SetPalette(IColorPalette, bool)设置图像调色板。
SetPixel(int, int, Color)为指定位置设置图像像素。
override SetResolution(double, double)使用此简洁方法精确调整此 RasterImage 的分辨率。适用于希望根据特定需求定制图像分辨率的开发者,确保最佳显示质量和文件大小管理。
virtual ToBitmap()将光栅图像转换为位图。此方法在 .Net7.0 及更高版本中不受支持。
virtual TrySetMetadata(IImageMetadataFormat)尝试设置 metadata 实例,前提是此 Image 实例支持并实现了 IImageMetadataFormat 类型。
WriteArgb32ScanLine(int, int[])将整条扫描线写入指定的扫描线索引。
WriteScanLine(int, Color[])将整条扫描线写入指定的扫描线索引。

示例

更改 DICOM 压缩中的颜色类型。

[C#]

using (var inputImage = Image.Load("original.jpg"))
{
    var options = new DicomOptions { ColorType = ColorType.Grayscale8Bit };

    inputImage.Save("original_8Bit.dcm", options);
}

在 DICOM 图像中使用 RLE 压缩。

[C#]

using (var inputImage = Image.Load("original.jpg"))
{
    var options = new DicomOptions
    {
        ColorType = ColorType.Rgb24Bit,
        Compression = new Compression { Type = CompressionType.Rle }
    };

    inputImage.Save("original_RLE.dcm", options);
}

在 DICOM 图像中使用 JPEG 2000 压缩。

[C#]

using (var inputImage = Image.Load("original.jpg"))
{
    var options = new DicomOptions
    {
        ColorType = ColorType.Rgb24Bit,
        Compression = new Compression
        {
            Type = CompressionType.Jpeg2000,
            Jpeg2000 = new Jpeg2000Options
            {
                Codec = Jpeg2000Codec.Jp2,
                Irreversible = false
            }
        }
    };

    inputImage.Save("original_JPEG2000.dcm", options);
}

在 DICOM 图像中使用 JPEG 压缩。

[C#]

using (var inputImage = Image.Load("original.jpg"))
{
    var options = new DicomOptions
    {
        ColorType = ColorType.Rgb24Bit,
        Compression = new Compression
        {
            Type = CompressionType.Jpeg,
            Jpeg = new JpegOptions
            {
                CompressionType = JpegCompressionMode.Baseline,
                SampleRoundingMode = SampleRoundingMode.Truncate,
                Quality = 50
            }
        }
    };

    inputImage.Save("original_JPEG.dcm", options);
}

此示例展示了如何从文件流加载 DICOM 图像。

[C#]

string dir = "c:\\temp\\";

// 从文件流加载 DICOM 图像。
using (System.IO.Stream stream = System.IO.File.OpenRead(dir + "sample.dicom"))
{
    using (Aspose.Imaging.FileFormats.Dicom.DicomImage dicomImage = new Aspose.Imaging.FileFormats.Dicom.DicomImage(stream))
    {
        // 将每页保存为单独的 PNG 图像。                    
        foreach (Aspose.Imaging.FileFormats.Dicom.DicomPage dicomPage in dicomImage.DicomPages)
        {
            // 根据页索引生成文件名。
            string fileName = string.Format("sample.{0}.png", dicomPage.Index);

            // DICOM 页面是栅格图像,因此所有对栅格图像允许的操作都适用于 DICOM 页面。
            dicomPage.Save(dir + fileName, new Aspose.Imaging.ImageOptions.PngOptions());
        }
    }
}

创建多页 Dicom 图像。

[C#]

using (DicomImage image = (DicomImage)Image.Create(
        new DicomOptions() { Source = new StreamSource(new MemoryStream()) },
        100,
        100))
{
    // 使用矢量图形绘制内容
    Graphics graphics = new Graphics(image);
    graphics.FillRectangle(new SolidBrush(Color.BlueViolet), image.Bounds);
    graphics.FillRectangle(new SolidBrush(Color.Aqua), 10, 20, 50, 20);
    graphics.FillEllipse(new SolidBrush(Color.Orange), 30, 50, 70, 30);

    // 保存绘制图像的像素。它们现在位于 Dicom 图像的第一页。
    int[] pixels = image.LoadArgb32Pixels(image.Bounds);

    // 在后面添加几页,使其更暗
    for (int i = 1; i < 5; i++)
    {
        DicomPage page = image.AddPage();
        page.SaveArgb32Pixels(page.Bounds, pixels);
        page.AdjustBrightness(i * 30);
    }

    // 在主页面前添加几页,使其更亮
    for (int i = 1; i < 5; i++)
    {
        DicomPage page = image.InsertPage(0);
        page.SaveArgb32Pixels(page.Bounds, pixels);
        page.AdjustBrightness(-i * 30);
    }

    // 将创建的多页图像保存到输出文件
    image.Save("MultiPage.dcm");
}

另请参见