gpt4 book ai didi

C# 如何在图片框中显示图片

转载 作者:太空宇宙 更新时间:2023-11-03 14:27:00 25 4
gpt4 key购买 nike

我正在尝试使用 openDicom.net 显示 dicom 图像。我应该在这里纠正什么?

openDicom.Image.PixelData obraz = new openDicom.Image.PixelData(file.DataSet);
// System.Drawing.Bitmap obrazek = (Bitmap)Bitmap.FromFile(element);
pictureBox1.Image = obraz;
pictureBox1.Show();

最佳答案

PixelData 不是图像。 PixelData 是原始图像信息。根据我的经验,大多数 DICOM 文件将使用 jpeg2000 图像。为了将它们转换为 PictureBox 可用的内容,您需要将其转换为图像。对于原始单色类型,您可以使用以下转换将其转换为 System.Drawing.Bitmap:

openDicom.Image.PixelData obraz = new openDicom.Image.PixelData(file.DataSet);

Bitmap img = new System.Drawing.Bitmap(obraz.Columns, obraz.Rows, System.Drawing.Imaging.PixelFormat.Format24bppRgb);

int resampleval = (int)Math.Pow(2, (obraz.BitsAllocated - obraz.BitsStored));
int pxCount = 0;
int temp = 0;

try
{
unsafe
{
BitmapData bd = img.LockBits(new Rectangle(0, 0, obraz.Columns, obraz.Rows), ImageLockMode.WriteOnly, img.PixelFormat);

for (int r = 0; r < bd.Height; r++)
{
byte* row = (byte*)bd.Scan0 + (r * bd.Stride);

for (int c = 0; c < bd.Width; c++)
{
temp = PixelData16[pxCount] / resampleval;

while (temp > 255)
temp = temp / resampleval;

row[(c * 3)] = (byte)temp;
row[(c * 3) + 1] = (byte)temp;
row[(c * 3) + 2] = (byte)temp;

pxCount++;
}
}

img.UnlockBits(bd);
}
}
catch
{
img = new Bitmap(10, 10);
}

pictureBox1.Image = img;
pictureBox1.Show();

对于其他图像类型,您需要使用适当的值进行类似的转换。此转换仅适用于单色类型,并且仅在将它们从 jpeg2000 转换为 jpeg 之后。对 jpeg2000 图像执行此操作将为您提供恰好一半的图像充满静态,另一半完全空白。

关于C# 如何在图片框中显示图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3653887/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com