2012-10-22 5 views
6

मैं एक अनुभवी प्रोग्रामर नहीं हूं, बस मेरे वीएस -2010 प्रोजेक्ट में एक डीआईसीओएम दर्शक जोड़ने की जरूरत है। मैं विंडोज फॉर्म में छवि प्रदर्शित कर सकता हूं, हालांकि यह पता नहीं लगा सकता कि विंडो केंद्र और चौड़ाई को कैसे बदला जाए। यहां मेरी स्क्रिप्ट है:फेलो ओक डिकॉम - छवि विंडो स्तर बदलना

DicomImage image = new DicomImage(_filename); 
      int maxV = image.NumberOfFrames; 
      sbSlice.Maximum = maxV - 1; 
      image.WindowCenter = 7.0; 
      double wc = image.WindowCenter; 
      double ww = image.WindowWidth; 

      Image result = image.RenderImage(0); 
      DisplayImage(result); 

यह काम नहीं किया। मुझे नहीं पता कि यह सही दृष्टिकोण है या नहीं।

+0

क्या आप डीआईसीओएम लाइब्रेरी का उपयोग कर रहे हैं, इसके बारे में थोड़ा और स्पष्ट हो सकते हैं? –

+0

मैं .NET के लिए फेलो ओक डिकॉम का उपयोग कर रहा हूं, धन्यवाद। – hncl

+1

नोट किया गया कि आपने * fo-dicom * चर्चा फ़ोरम पर एक ही प्रश्न पोस्ट किया है और प्रतिक्रिया मिली है कि आपके द्वारा चलाए जा रहे सॉफ़्टवेयर संस्करण में विंडो स्तर की बग है। * स्टैकओवरफ्लो * में स्थिरता के लिए, फोरम प्रतिक्रिया के आधार पर अपना स्वयं का उत्तर यहां प्रदान करना एक अच्छा विचार हो सकता है, और यह भी संकेत देने के लिए कि आप चल रहे हैं * fo-dicom * संस्करण 1.0.26। –

उत्तर

1

मैंने कोड को देखा और यह बेहद छोटी दिख रही थी। https://github.com/rcd/fo-dicom/blob/master/DICOM/Imaging/DicomImage.cs

वर्तमान गाड़ी कार्यान्वयन WindowCenter या WindowWidth गुण स्थापित करने में जब तक Dataset.Get (DicomTag.PhotometricInterpretation) कोई प्रभाव नहीं है या तो Monochrome1 या Monochrome2Load() दौरान होता है। यह पहले से ही हास्यास्पद है, लेकिन इसका उपयोग अभी भी नहीं किया जा सकता है क्योंकि _renderOptions वैरिएबल केवल एक ही स्थान पर सेट है और तुरंत _pipeline सृजन के लिए उपयोग किया जाता है (आपको WindowCenter संपत्ति का उपयोग करके इसे बदलने का मौका नहीं देता है)। आपका एकमात्र मौका ग्रेस्केल _renderOptions प्रारंभिकरण है: _renderOptions = GrayscaleRenderOptions.FromDataset(Dataset);

वर्तमान समाधान: अपने डाटासेट

  • DicomTag.WindowCenter उचित रूप में निर्धारित
  • DicomTag.WindowWidth != 0.0
  • DicomTag.PhotometricInterpretation == Monochrome1 या Monochrome2

निम्नलिखित कोड होना चाहिए सिद्ध है कि:

DicomDataset dataset = DicomFile.Open(fileName).Dataset; 
//dataset.Set(DicomTag.WindowWidth, 200.0); //the WindowWidth must be non-zero 
dataset.Add(DicomTag.WindowCenter, "100.0"); 
//dataset.Add(DicomTag.PhotometricInterpretation, "MONOCHROME1"); //ValueRepresentations tag is broken 
dataset.Add(new DicomCodeString(DicomTag.PhotometricInterpretation, "MONOCHROME1")); 
DicomImage image = new DicomImage(dataset); 
image.RenderImage(); 

सबसे अच्छा समाधान: प्रतीक्षा करें जबकि यह छोटी गाड़ी लाइब्रेरी तय की गई है।

+0

समय लेने के लिए धन्यवाद, हमने निम्नलिखित कोड में DicomDataset क्लास में समस्या को संकुचित किया: यदि (टाइपोफ़ (टी) == टाइपफ़ोफ़ (दशमलव)) वापसी जोड़ें (नया DicomDecimalString (टैग, मान। कैस्ट () .ToArray())); त्रुटि "सिस्टम प्रकार के मानों के साथ प्रकार डीएस के DICOM तत्व बनाने में असमर्थ है। Int32" मैंने इसे Google समूह पर पोस्ट किया है। कुल मिलाकर मुझे बेहतर पुस्तकालयों में से एक होने के लिए फॉ-डिकॉम मिला, मैंने बिना किसी स्केस के अन्य टूलकिट थक गए हैं। – hncl

+0

आपको क्यों लगता है कि यह समस्या का स्रोत है? क्या आपके पास कहीं दशमलव हैं? यदि प्रश्न में पोस्ट किया गया कोड काम करता है, तो मुझे लगता है कि मैं विंडोज सेंसर काम करने के लिए कोड लिख सकता हूं। अनुलेख क्या आपकी छवियां ग्रेस्केल हैं? –

+0

छवियां ग्रेस्केल हैं। समस्या को ठीक करने के लिए मेरे कामकाज का लिंक यहां दिया गया है: https://groups.google.com/forum/?fromgroups=#!topic/fo-dicom/ycnB25bAvq4। धन्यवाद – hncl

5

डिकॉम इमेज क्लास को छवि दर्शक को लागू करने के इरादे से नहीं बनाया गया था। यह DICOM डंप उपयोगिता में पूर्वावलोकन छवियों को प्रस्तुत करने और छवि संपीड़न/डिकंप्रेशन कोडेक्स का परीक्षण करने के लिए बनाया गया था। शायद पुस्तकालय में इसे शामिल करना गलती थी?

कोड में गलती के रूप में कोड को गलती करना मुश्किल है जब इसका उपयोग अपनी इच्छित कार्यक्षमता से कहीं अधिक के लिए किया जा रहा है।

उस ने कहा, मैंने कोड को संशोधित करने में कुछ समय लगाया है ताकि विंडो केंद्र/विंडोविड्थ गुण प्रस्तुत छवि पर लागू हो जाएं। आप गिट रेपो में इन संशोधनों को पा सकते हैं।

var img = new DicomImage(fileName); 
img.WindowCenter = 2048.0; 
img.WindowWidth = 4096.0; 
DisplayImage(img.RenderImage(0)); 
+1

धन्यवाद कोल्बी, बहुत सराहना की। आप सही हैं, मैं विस्तारित फ़ंक्शन के लिए लाइब्रेरी का उपयोग करने की कोशिश कर रहा था; इसमें कोई संदेह नहीं है कि यह डीआईसीओएम के साथ मेरे सीमित अनुभव के कारण है। आपके प्रयास के लिए फिर से धन्यवाद। – hncl

संबंधित मुद्दे