7

これは非常に狭く具体的な質問ですが、これを使用している人が他にいることはわかっているので、指を交差させたままにして、誰かがこの質問を写真に撮ってくれることを願っています。

私は、その一部がDicomビューアであるWPFアプリケーションに取り組んでいます。Dicomのものを処理するためにサードパーティのコンポーネントを使用したいと思います、そしてClearCanvasは私たちがこれまでのところ最高の印象を持っているものです。Dicomファイルをロードして属性をフェッチすることはできますが、画像データをImageコントロールのSourceプロパティに配置して表示するのに問題があります。これを実現するためのヒントを持っている人はいますか?

画像データを抽出するために使用するコードは次のとおりです。

var file = new DicomFile(dicomFilePath);
var patientName = file.DataSet.GetAttribute(DicomTags.PatientsName);
var imageData = file.DataSet.GetAttribute(DicomTags.PixelData);

ImageViewerライブラリの使用も試みましたが、それでも同じデータです。

var localSopDataSource = new LocalSopDataSource(new DicomFile(dicomFilePath));
var patientName = localSopDataSource.File.DataSet.GetAttribute(DicomTags.PatientsName);
var imageData = localSopDataSource.File.DataSet.GetAttribute(DicomTags.PixelData);
4

2 に答える 2

7

さて、私はそれを理解しました..これを達成するためのいくつかの方法があるかもしれませんが、これは私がしたことです。これで、ビットマップデータを提供するプロパティにバインドされたWpfイメージができました。以下は、ビットマップデータを提供するために使用されるプロパティです。

public BitmapSource CurrentFrameData
{
    get
    {
        LocalSopDataSource _dicomDataSource = 
            new LocalSopDataSource(_dicomFilePath);
        var imageSop = new ImageSop(_dicomDataSource);

        IPresentationImage presentationImage = 
            PresentationImageFactory.Create(imageSop.Frames[CurrentFrame]);

        int width = imageSop.Frames[CurrentFrame].Columns;
        int height = imageSop.Frames[CurrentFrame].Rows;

        Bitmap bmp = presentationImage.DrawToBitmap(width, height);
        BitmapSource output = Imaging.CreateBitmapSourceFromHBitmap(
          bmp.GetHbitmap(),
          IntPtr.Zero,
          Int32Rect.Empty,
          BitmapSizeOptions.FromWidthAndHeight(width, height));

          return output;
    }
}

これは非常に簡単な解決策であることに注意してください。たとえば、マルチフレーム画像をスクロールするときの重い負荷を避けるために、画像のプリロードなどを実行したい場合があります。しかし、「画像の表示方法」の質問については、これで答えられるはずです。

于 2009-11-07T23:32:25.577 に答える
0

わかりました。次のコードを使用して、PictureboxにDICOM画像を表示することができました。

使用したアセンブリは次のとおりです。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using ClearCanvas.Common;
using ClearCanvas.Dicom;
using System.Windows.Media.Imaging;
using ClearCanvas.ImageViewer;
using ClearCanvas.ImageViewer.StudyManagement;
using System.Windows.Interop;
using System.Windows.Media;
using System.Windows;
using System.IO;

また、これらのdllをbin/debugにコピーする必要がありました。

BilinearInterpolation.dll(これはアセンブリとして参照できなかったため、bin / degugフォルダーにコピーしました)

WindowsBase.dll(これはアセンブリとして参照できました)

コード(私のプロジェクトには、dcmファイルを選択して画像ボックスに表示するためのボタンがあります)

Private void button2_Click(object sender, EventArgs e)
    {
        OpenFileDialog ofd = new OpenFileDialog();
        ofd.Filter = "DICOM Files(*.*)|*.*";
        if (ofd.ShowDialog() == DialogResult.OK)
        {
            if (ofd.FileName.Length > 0)
            {

                var imagen = new DicomFile(ofd.FileName); 

                LocalSopDataSource DatosImagen = new LocalSopDataSource(ofd.FileName); 

        ImageSop imageSop = new ImageSop(DatosImagen);

        IPresentationImage imagen_a_mostrar = PresentationImageFactory.Create(imageSop.Frames[1]); 

        int width = imageSop.Frames[1].Columns; 

        int height = imageSop.Frames[1].Rows; 

        Bitmap bmp = imagen_a_mostrar.DrawToBitmap(width, height); 

        PictureBox1.Image = bmp; 



            imageOpened = true;

            }
            ofd.Dispose();
        }
    }
于 2013-07-14T18:08:58.057 に答える