2009-10-30 7 views
7

यह एक बहुत ही संकीर्ण और विशिष्ट प्रश्न है, लेकिन मुझे पता है कि इसका उपयोग करके वहां कोई और है, इसलिए मैं अपनी उंगलियों को पार कर रखूंगा और आशा करता हूं कि आप में से कोई भी इस प्रश्न को चित्रित करेगा अप।लोड डिकॉम छवि और इसे प्रदर्शित करें - ClearCanvas लाइब्रेरी का उपयोग करके

मैं एक डब्ल्यूपीएफ आवेदन पर काम कर रहा हूं जहां इसका एक हिस्सा एक डिकॉम दर्शक है। हम डिकॉम सामान को संभालने के लिए एक तृतीय पक्ष घटक का उपयोग करना चाहते हैं, और ClearCanvas वह है जिसे हमें अब तक का सबसे अच्छा प्रभाव मिला है। हम एक डिकॉम फ़ाइल लोड करने और विशेषताओं को लाने में सक्षम हैं, लेकिन हमें इसे दिखाने के लिए छवि नियंत्रण की स्रोत प्रॉपर्टी पर छवि डेटा डालने में समस्याएं आ रही हैं। यह कैसे होता है इस पर संकेत के साथ कोई भी?

यहाँ कोड मैं छवि डेटा निकालने के लिए उपयोग करें:

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); 

उत्तर

7

ठीक है, मैं समझ यह बाहर .. यह प्राप्त करने के कुछ और तरीके हो सकते हैं, लेकिन यह मैंने किया है। अब मेरे पास एक डब्लूपीएफ छवि है जो किसी संपत्ति से जुड़ी है जो बिटमैप डेटा प्रदान करती है। बिटमैप डेटा प्रदान करने के लिए प्रयुक्त संपत्ति निम्न है।

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; 
    } 
} 

ध्यान दें कि यह एक बहुत ही आगे का समाधान है। एक उदाहरण हो सकता है मल्टीफ्रेम छवियों को स्क्रॉल करते समय भारी लोड से बचने के लिए चित्रों को प्रीलोड करना जैसे सामान करना चाहते हैं। लेकिन के लिए सवाल "howto छवि प्रदर्शित" - यह यह उत्तर देना चाहिए ..

+0

stiank81 देता है कि अपने प्रोजेक्ट में एक बटन नहीं है: आप सूची कृपया सकते हैं * सामान बनाने के लिए आपके प्रोजेक्ट में जोड़े गए डीडी फाइलें। –

+0

क्या आपने विंडो चौड़ाई विंडो स्तर को आजमाया है, यदि हां, तो – AMH

1

यह भी जांच Steve, के रूप में वह ClearCanvas में काम करता है। मैंने this स्टैक ओवरफ्लो प्रश्न में अपनी प्रतिक्रिया (और इसके बारे में पुष्टि) देखी है।

+0

धन्यवाद! हाँ - मैंने यह सवाल भी देखा है। – stiank81

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 कॉपी करना पड़ा/डिबग:

BilinearInterpolation.dll (यह एक मैं assemblie के रूप में यह संदर्भ could'nt तो मैं बस bin/degug फ़ोल्डर में नकल की)

WindowsBase.dll (यह एक मैं w के रूप में एक assemblie के रूप में यह संदर्भ के लिए)

कोड में सक्षम (आप dcm फ़ाइल का चयन करें और फिर एक picturebox में यह दिखाने)

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(); 
     } 
    } 
संबंधित मुद्दे