2009-11-23 11 views
7

एंटीअलाइजिंग सक्षम के साथ एक एएमएफ मेटाफाइल (निर्यात किए गए फॉर्म को ड्रॉइंग टूल) खींचने का कोई तरीका है? मेरे द्वारा किए गए टूल्स एएमएफ फाइलों को एंटाइज किए जाने में सक्षम नहीं हैं, इसलिए मुझे आश्चर्य हुआ कि अगर मैं अपने नियंत्रणों के ऑनपेंट ओवरराइड में एएमएफ ड्राइंग करते समय इसे मैन्युअल रूप से चालू कर सकता हूं।ड्रा एएमएफ एंटीअलाइज्ड

अगर कोई यह पुष्टि कर सकता है कि एंटीअलाइज्ड एएमएफ फाइलें उत्पन्न करने के लिए तकनीकी रूप से संभव है, तो एक और समाधान एक ड्राइंग टूल का उपयोग करना होगा जो एंटीअलाइज्ड एएमएफ को निर्यात कर सकता है या बाद में तीसरा पार्टी कनवर्टर कर सकता है। अगर कोई ऐसा उपकरण जानता है, तो कृपया मुझे बताएं।

संपादित करें: emf instructions पर ध्यान देने पर ऐसा प्रतीत नहीं होता है कि एएमएफ वास्तव में जानकारी संग्रहीत कर सकता है कि क्या इसे एंटीअलाइज्ड किया जाना है या नहीं। कम से कम मुझे कुछ भी नहीं मिला। यह अधिक संभावना है कि प्लेबैक इंजन द्वारा एंटीअलाइजिंग किया जाता है। उदाहरण के लिए जब मैं वर्ड 2007 में एक एएमएफ खोलता हूं तो इसे एंटीअलाइज्ड किया जाता है। लेकिन जब मैं इसे जीडीआई + "प्लेबैक इंजन" (Graphics.DrawImage(...)) के साथ खींचता हूं। या जब मैं इसे मानक विंडोज छवि दर्शक देखता हूं। इससे मुझे विश्वास होता है कि कुछ औजारों में वास्तव में अपना स्वयं का एएमएफ प्लेबैक इंजन होता है। तो हो सकता है कि मुफ्त .NET लाइब्रेरी (अधिमानतः स्रोत कोड के साथ) जो मुझे पार्स किए गए एमएमएफ फ़ाइल में संग्रहीत एमएमएफ निर्देशों का ऑब्जेक्ट मॉडल दे ताकि मैं इसे Graphics.DrawImage(...) का उपयोग करने के बजाय इसे वापस चला सकूं?

+2

यदि अन्य सभी विफल हो जाते हैं तो आप शायद इसे चार बार आकार या फिर नीचे खींच सकते हैं और फिर डाउनसमूल कर सकते हैं। – Joey

+0

मैंने इसे छोटे आकारों पर करने की कोशिश की, यह अभी भी बदसूरत दिखता है इसके अलावा इस दृष्टिकोण का उपयोग कर एक बदसूरत स्मृति ओवरहेड है। (मैं एक ही समय में ऐसे कई उपयोगकर्ता नियंत्रण प्रदर्शित करूँगा)। – bitbonk

+0

डुप्लिकेट: http://stackoverflow.com/questions/1422949/emf-with-forced-antialiasing – liori

उत्तर

9

हमारे पास डायरेक्टएक्स प्रोजेक्ट में एक समान समस्या थी। Upscaling और downscaling एक निश्चित डिग्री के लिए काम करता है, लेकिन यह इसे पकड़ रहा है। यदि ऐसा कुछ है जो आपको करने की आवश्यकता है, तो आप शायद डब्लूएमएफ के रिकॉर्ड को पार्स कर सकते हैं और उन्हें जीडीआई + एंटीअलाइज्ड के साथ आकर्षित कर सकते हैं।

निम्नलिखित धागे वापस इस अप (लेकिन वे 2005 से तो चीजें बदल गई हो सकता है कर रहे हैं):

http://www.dotnet247.com/247reference/msgs/28/144605.aspx

http://www.dotnetmonster.com/Uwe/Forum.aspx/dotnet-sdk/1127/Graphics-DrawImage-metafile-no-antialiasing

[संपादित करें:]

इन तीन कार्यक्रमों आपके लिए नौकरी कर सकता है: मुझे लगता है कि आप इसे हाथ से करने के लिए ठीक हैं:

http://emf-to-vector-converter-command-line-ser.smartcode.com/info.html

http://www.verypdf.com/pdf-editor/index.html

http://www.ivanview.com/converter/emf-batch-converter.html

[द्वितीय संपादित करें:]

ठीक है, यहाँ एक कार्यक्रम करने देगा कि आप विभिन्न तरीकों से एक ईएमएफ का निरीक्षण:

http://download.cnet.com/windows/3055-2383_4-10558240.html?tag=pdl-redir

... और यहां एक फ्रीवेयर है लाइब्रेरी जो आपको ईएमएफ कमांड के 122 को पार्स करने और उन्हें जीडीआई + में आउटपुट करने देगी। यही कारण है कि शायद चाल करना चाहिए:

http://www.codeproject.com/KB/GDI-plus/emfexplorer.aspx?msg=2359423

... ओह, और नोटिस भी codeproject पेज पर # 3 टिप्पणी। ऐसा लगता है कि किसी ने पहले दीवार के खिलाफ अपने सिर टक्कर लगी है। आशा है इससे तुम्हारी समस्या का समाधान हो गया होगा।

+0

वे प्रोग्राम बस इसे अन्य फ़ाइल स्वरूपों में परिवर्तित करने लगते हैं। हमने वेक्टर कला को प्रदर्शित करने के लिए ईएमएफ चुना क्योंकि यह एकमात्र वेक्टरफॉर्मैट है जिसे जीडीआई + संभाल सकता है। हमें कला से कोड (इसलिए जीडीआई +) खींचने की जरूरत है क्योंकि हम इसे रनटाइम पर गतिशील रूप से संशोधित करते हैं और इसे एनिमेट करते हैं। जीडीआई + के साथ एएमएफ प्रदर्शित करने की संभावना सबसे अधिक सीपीयू- और वेक्टर कला प्रदर्शित करने के लिए स्मृति अनुकूल तरीका है। एक और प्रारूप का उपयोग करना जो एएमएफ सिर्फ सहायक प्रतीत नहीं होता है। एक अच्छा समाधान एक Vectorgrafik (किसी भी प्रारूप) सी # जीडीआई + निर्देशक कनवर्टर के लिए होगा। – bitbonk

+0

उस स्थिति में, आप एक बनाए रखा मोड ड्राइंग सिस्टम का उपयोग क्यों नहीं करते हैं और ईएमएफ को पूरी तरह से छोड़ देते हैं? सिद्धांत रूप में आप ईएमएफ छवियों को स्टोर कर सकते हैं और प्रत्येक आकृति निकालने के लिए एक कस्टम लाइब्रेरी का उपयोग कर सकते हैं और उन्हें फिर से जीडीआई (+) के साथ आकर्षित कर सकते हैं। हालांकि, समस्या के आपके वर्णन से, मैंने एक मालिकाना प्रारूप बनाया होगा जो ऑब्जेक्ट्स का उपयोग करके छवियों का वर्णन करता है, फिर इसे किसी भी सतह पर प्रस्तुत करता है। एसएफएफ का उपयोग करने के लिए एक अलग दृष्टिकोण हो सकता है, जो अब तक बेहतर समर्थित है, अच्छी तरह से प्रलेखित है, और आईएमओ अधिक बहुमुखी है। – Pedery

+0

हम एक प्रोपेटरी प्रारूप का उपयोग नहीं कर सकते क्योंकि हमें कला को एक आम ड्राइंग सॉफ्टवेयर (इलस्ट्रेटर, इंकस्केप, कोरल्ड्रा ... उनमें से एक) के साथ आकर्षित करने की आवश्यकता है। – bitbonk

4

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

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

मेरा अनुमान है कि शब्द डाउनस्प्लिंग चाल का उपयोग कर रहा है।

3

ईएमएफ फ़ाइल जीडीआई कमांड की एक सूची है। तो यह एंटी-अलियाइज्ड नहीं होगा, भले ही जीडीआई + के तहत, आप ड्राइंग से पहले एक SmoothingMode() कॉल डाल दें। आपको जीडीआई कमांड का आकलन करना होगा, फिर इसे जीडीआई + कमांड में अनुवाद करना होगा।

Vista/Seven के तहत, आप जीडीआई + 1.1 फ़ंक्शन का उपयोग GdipConvertToEmfPlus/ConvertToEmfPlus नामक कर सकते हैं। यदि आप चाहते हैं कि आपका प्रोग्राम एक्सपी के साथ काम करे, तो आपको अपनी खुद की गणना लिखनी चाहिए, फिर जीडीआई + कमांड में रूपांतरण करना चाहिए।

जीडीआई गणना तो जीडीआई + में रूपांतरण संभव है emfexplorer द्वारा किया गया है, लेकिन मैंने some code perhaps more easy to follow लिखा है, भले ही यह डेल्फी में लिखा गया हो।

मैं अभी यह जवाब डाल रहा हूं (मुझे देर हो चुकी है), क्योंकि मैंने कनवर्टोइमफ्लुस का उपयोग करके समाधान खोजने में काफी समय बिताया है, और इस विधि के उपलब्ध होने पर कुछ ट्यूनेड ओपन सोर्स कोड लिखना है।

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