2011-10-18 12 views
5

मैं सिल्वरलाइट 4 ऐप से एक छवि (क्यूआर कोड) प्रिंट करने की कोशिश कर रहा हूं, हालांकि मुद्रित होने पर छवि को एंटीअलाइज्ड किया गया है (मैंने एक्सपीएस फ़ाइल प्रिंटर और हार्डवेयर प्रिंटर दोनों की कोशिश की है) छवि धुंधली है, और है बारकोड रीडर द्वारा पठनीय नहीं।सिल्वरलाइट प्रिंटिंग एंटी-एलाइजिंग

Image from printed XPS document http://img805.imageshack.us/img805/7677/qraliasing.png

मैं इसे मुद्रित करने के लिए इस सरल कोड का उपयोग कर रहा:

WriteableBitmap bitmap = new WriteableBitmap(width, height); 
//write bitmap pixels 
Image image = new Image(){Stretch = Stretch.None}; 
image.Source = bitmap; 
image.Width = bitmap.PixelWidth; 
image.Height = bitmap.PixelHeight; 
//Print 
PrintDocument printDocument = new PrintDocument(); 
printDocument.PrintPage += (sender, args) => 
{ 
    args.PageVisual = image; 
}; 
printDocument.Print("QrCode"); 

उत्तर

2

मुझे एक समाधान मिला है।

सिल्वरलाइट 4 में छवि नियंत्रण प्रिंट करते समय, यह प्रिंटर को छवि नियंत्रण की "प्रिंट स्क्रीन" नहीं भेजता है, जैसे यह आपके उपयोगकर्ता नियंत्रण में दिखता है लेकिन इसकी स्रोत प्रॉपर्टी में एक छवि सेट होता है। यदि आप 100x100 पीएक्स और 1000x1000px संकल्पों के दो बिटमैप्स उत्पन्न करते हैं और उन्हें 100x100px आकार में डालते हैं छवि नियंत्रण प्रिंट परिणाम उतना ही नहीं होगा जितना आप उम्मीद कर सकते हैं।

तो समाधान उच्च रिज़ॉल्यूशन छवि (या upscale छवि) उत्पन्न करने के लिए है और इसे वांछित आकार के छवि नियंत्रण में डाल दिया है।

-1

क्या आप ग्राफिक्स पर समरेखण प्रकार के परिवर्तन से आपत्ति की कोशिश?

WriteableBitmap bitmap = new WriteableBitmap(width, height); 
//write bitmap pixels 
Image image = new Image(){Stretch = Stretch.None}; 
image.Source = bitmap; 
image.Width = bitmap.PixelWidth; 
image.Height = bitmap.PixelHeight; 
//Print 
PrintDocument printDocument = new PrintDocument(); 
printDocument.PrintPage += (sender, args) => 
{ 
    //**Add this** 
    args.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None; 

    args.PageVisual = image; 
}; 
printDocument.Print("QrCode"); 
+0

कोई तर्क नहीं है। ग्राफिक्स संपत्ति। System.Drawing.Drawing2D.SmoothingMode सिल्वरलाइट में उपलब्ध नहीं है। –

+0

शायद अगर आपने यहां कोई संपत्ति का उपयोग करने की कोशिश की है? http://10rem.net/blog/2010/05/01/crappy-image-resizing-in-wpf-try-renderoptionsbitmapscalingmode मुझे नहीं पता कि यह संबंधित है या नहीं। बस सहायक होने की कोशिश कर रहा है। –

+0

सिस्टम। ड्रॉइंग। ड्रॉइंग 2 डी। सॉटिंगमोड सिल्वरलाइट में उपलब्ध नहीं है। आपके द्वारा प्रदान किया गया लिंक WPF से संबंधित है। –

0

ऐसा लगता है आप एक समाधान का सामना करना पड़ा के रूप में मैं मेरा टाइपिंग था, लेकिन मैं वैसे भी प्रस्तुत करेंगे ...

कारण ऐसा होता है कि PrintDocument अनिवार्य रूप से UIElement (अपनी छवि) ले जाएगा है, जो आमतौर पर 96 डीपीआई स्क्रीन पर ब्लूट करता है, और इसे प्रिंट करने के लिए उपयुक्त 600 डीपीआई तक बढ़ा देता है। चूंकि इस upscale ऑपरेशन को बताने के लिए कोई रास्ता नहीं है कि कैसे चिकनाई को संभालने के लिए, आप क्या बदसूरत धुंधला है।

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

image.RenderTransform = new ScaleTransform { 
    ScaleX = 96.0/600.0, 
    ScaleY = 96.0/600.0 
}; 
:

एक बार जब आप अपने उच्च-रिज़ॉल्यूशन QR कोड की Blit (सामान्य रूप में अनिवार्य रूप से 600/96 = 6.25 बार के रूप में बड़े) है, तो आप पैमाने को बदलने कि यह वापस नीचे ठीक उसी राशि से आकार लागू

जब आप इसे प्रिंट करते हैं, तो आपको तेज किनारों को देखना चाहिए।