इस पर निर्भर करता है कि आप कितना सटीक होना चाहते हैं, यह मुश्किल हो सकता है।
कई दृष्टिकोण हैं। ऐसा लगता है कि आप प्रिंटर आकार के बिटमैप पर आकर्षित करने की कोशिश कर रहे हैं और फिर इसे कम करें। ऐसा करने के लिए कदम हैं:
- प्रिंटर के लिए डीसी (या बेहतर अभी तक, आईसी - सूचना संदर्भ) बनाएं।
- क्वेरी प्रिंटर डीसी संकल्प पता लगाने के लिए, पृष्ठ आकार, शारीरिक ऑफसेट, आदि
- खिड़की/स्क्रीन के लिए एक डीसी बनाएँ।
- एक संगत डीसी (मेमोरी डीसी) बनाएँ।
- विंडो/स्क्रीन के लिए एक संगत बिटमैप बनाएं, लेकिन आकार प्रिंटर पेज का पिक्सेल आकार होना चाहिए। (इस दृष्टिकोण के साथ समस्या यह है कि यह एक बड़ा बिटमैप है और यह असफल हो सकता है।)
- स्मृति डीसी में संगत बिटमैप का चयन करें।
- वास्तविक प्रिंटर पर ड्राइंग करते समय उसी निर्देशांक का उपयोग करके स्मृति डीसी को आकर्षित करें।(जब आप फोंट का चयन करें, सुनिश्चित करें कि आप प्रिंटर की तार्किक इंच, न कि स्क्रीन के तार्किक इंच करने के लिए उन्हें पैमाने पर कर सकते हैं।)
StretchBlt
स्मृति डीसी खिड़की है, जो पूरी छवि स्केल करेगा करने के लिए। आप खिंचाव मोड के साथ प्रयोग करना चाह सकते हैं यह देखने के लिए कि आप किस प्रकार की छवि प्रदर्शित करने जा रहे हैं, उसके लिए सबसे अच्छा क्या काम करता है।
- सभी संसाधनों को जारी करें।
लेकिन इससे पहले कि आप उस दिशा में सिर, विकल्पों पर विचार। इस दृष्टिकोण में एक विशाल ऑफ़-स्क्रीन बिटमैप आवंटित करना शामिल है। यह संसाधन-गरीब कंप्यूटरों पर असफल हो सकता है। यहां तक कि यदि ऐसा नहीं होता है, तो हो सकता है कि आप अन्य ऐप्स को भूखा हो।
किसी अन्य उत्तर में दिए गए मेटाफाइल दृष्टिकोण कई अनुप्रयोगों के लिए एक अच्छा विकल्प है। मैं इसके साथ शुरू करूंगा।
एक और दृष्टिकोण कुछ काल्पनिक उच्च संकल्प इकाई में सभी आकार यह पता लगाने की है। उदाहरण के लिए, मान लें कि सबकुछ एक इंच के 1000 वें स्थान पर है। फिर आपके ड्राइंग दिनचर्या इस काल्पनिक इकाई को लक्ष्य डिवाइस द्वारा उपयोग की जाने वाली वास्तविक डीपीआई में स्केल करेंगे।
यह पिछले दृष्टिकोण (और संभवतः मेटाफ़ाइल एक) के साथ समस्या यह है कि GDI फोंट पूरी तरह से रैखिक पैमाने पर नहीं है। लक्ष्य संकल्प के आधार पर अलग-अलग वर्णों की चौड़ाई tweaked हैं। एक उच्च-रिज़ॉल्यूशन डिवाइस (जैसे 300+ डीपीआई लेजर प्रिंटर) पर, यह ट्वीविंग न्यूनतम है। लेकिन एक 96-डीपीआई स्क्रीन पर, tweaks एक रेखा की लंबाई पर एक महत्वपूर्ण त्रुटि में जोड़ सकते हैं। इसलिए मुद्रित पृष्ठ पर आपके पूर्वावलोकन विंडो में टेक्स्ट ऑफ़-ऑफ-अनुपात (आमतौर पर व्यापक) दिखाई दे सकता है।
इस प्रकार कट्टर दृष्टिकोण प्रिंटर संदर्भ में पाठ को मापने के लिए, और स्क्रीन संदर्भ में फिर से मापने, और विसंगति के लिए समायोजित है। उदाहरण के लिए (बनाई गई संख्याओं का उपयोग करके), आप प्रिंटर संदर्भ में कुछ पाठ की चौड़ाई को माप सकते हैं, और यह 900 प्रिंटर पिक्सल तक आता है। मान लीजिए प्रिंटर पिक्सल का स्क्रीन पिक्सेल स्क्रीन का अनुपात 3: 1 है। आप स्क्रीन पर एक ही पाठ 300 स्क्रीन पिक्सेल चौड़े होने की उम्मीद करेंगे। लेकिन आप स्क्रीन संदर्भ में मापते हैं और आपको 325 स्क्रीन पिक्सेल की तरह एक मान मिलता है। जब आप स्क्रीन पर आते हैं, तो आपको किसी भी तरह टेक्स्ट 25 पिक्सल को संकुचित करना होगा। आप पात्रों को एक साथ घूम सकते हैं, या थोड़ा छोटा फ़ॉन्ट चुन सकते हैं और फिर उन्हें बाहर खींच सकते हैं।
कट्टर दृष्टिकोण में अधिक जटिलता शामिल है। उदाहरण के लिए, आप प्रिंटर ड्राइवर द्वारा किए गए फ़ॉन्ट प्रतिस्थापन का पता लगाने का प्रयास कर सकते हैं और उपलब्ध स्क्रीन फोंट के साथ जितनी बारीकी से आप मिलान कर सकते हैं।
मैं बड़े बिटमैप का एक संकर और कट्टर दृष्टिकोण के साथ अच्छी किस्मत लिया है। पूरे पृष्ठ के लिए एक विशाल बिटमैप बनाने के बजाय, मैं टेक्स्ट की एक पंक्ति के लिए काफी बड़ा बना देता हूं। फिर मैं प्रिंटर आकार को ऑफस्क्रीन बिटमैप और StretchBlt
पर स्क्रीन आकार पर खींचता हूं। यह फ़ॉन्ट गुणवत्ता की थोड़ी गिरावट पर आकार विसंगति से निपटने को समाप्त करता है। यह वास्तविक प्रिंट पूर्वावलोकन के लिए उपयुक्त है, लेकिन आप इस तरह एक WYSIWYG संपादक बनाना नहीं चाहते हैं। इस लाइन को व्यावहारिक बनाने के लिए एक-पंक्ति बिटमैप काफी छोटा है।
अच्छी खबर केवल पाठ कठिन है। अन्य सभी चित्रण निर्देशांक और आकारों का एक सरल स्केलिंग है।
मैं GDI + अधिक इस्तेमाल नहीं किया है, लेकिन मुझे लगता है कि यह गैर रेखीय फ़ॉन्ट स्केलिंग के साथ दूर किया था। तो यदि आप जीडीआई + का उपयोग कर रहे हैं, तो आपको केवल अपने निर्देशांक को स्केल करना होगा। दोष यह मुझे नहीं लगता कि उस पर GDI + फॉन्ट गुणवत्ता के रूप में अच्छा है।
और अंत में, आप Vista या बाद में एक स्थानीय एप्लिकेशन हैं, सुनिश्चित करें कि आप "DPI-aware" के रूप में अपनी प्रक्रिया में चिह्नित किए गए हैं। अन्यथा, यदि उपयोगकर्ता एक उच्च डीपीआई स्क्रीन पर है, विंडोज आप से झूठ और दावा संकल्प केवल 96 डीपीआई है और फिर एक फजी ऊपर स्केलिंग जो कुछ भी आप आकर्षित करना है कि होगा।यह दृश्य गुणवत्ता को कम करता है और आपके प्रिंट पूर्वावलोकन को और भी जटिल बना सकता है। चूंकि बहुत सारे कार्यक्रम उच्च डीपीआई स्क्रीन पर अच्छी तरह अनुकूल नहीं होते हैं, इसलिए माइक्रोसॉफ्ट ने Vista में डिफ़ॉल्ट रूप से "उच्च डीपीआई स्केलिंग" जोड़ा।
संपादित जोड़ें
एक और चेतावनी: आप प्रिंटर आकार बिटमैप के साथ स्मृति डीसी में एक HFONT चुनते हैं, तो यह संभव है कि आप जब कि एक ही का चयन क्या मिलेगा तुलना में एक अलग फॉन्ट मिलता है वास्तविक प्रिंटर डीसी में HFONT। ऐसा इसलिए है क्योंकि कुछ प्रिंटर ड्राइवर सामान्य फ़ॉन्ट्स को स्मृति वाले लोगों के साथ प्रतिस्थापित करेंगे। उदाहरण के लिए, कुछ पोस्टस्क्रिप्ट प्रिंटर कुछ सामान्य ट्रू टाइप फ़ॉन्ट्स के लिए एक आंतरिक पोस्टस्क्रिप्ट फ़ॉन्ट को प्रतिस्थापित करेंगे।
आप पहले प्रिंटर आईसी में HFONT चयन कर सकते हैं, तो GetTextFace
, GetTextMetrics
, और शायद GetOutlineTextMetrics
तरह GDI कार्यों का उपयोग चयनित वास्तविक फॉन्ट के बारे में पता लगाने के लिए। फिर आप प्रिंटर का उपयोग करने के लिए अधिक निकटता से मिलान करने के लिए एक नया LOGFONT बना सकते हैं, इसे HFONT में बदल दें, और इसे अपनी मेमोरी डीसी में चुनें। यह वास्तव में एक अच्छा कार्यान्वयन का प्रतीक है।
मुझे जिस मार्ग पर मैंने फैसला किया है उस पर मुझे कोई गर्व नहीं है ...:/प्रिंटर डीसी जानकारी प्राप्त करें - चौड़ाई, ऊंचाई, और logpixelsy। CreateCompatibleDC, प्रिंट पूर्वावलोकन विंडो के डीसी से बिटमैप, लेकिन चौड़ाई के साथ, प्रिंटर की ऊंचाई (मोन्डो आकार की मेमोरी हत्या बिटमैप) और जब मैं CreateFont करता हूं, तो मैं ऊंचाई के लिए :: MulDiv (पॉइंट, logPxlY, 72) का उपयोग करता हूं (प्रिंटर डीसी से logPxlY का उपयोग करके)। Soooooo, मैं इसे बहुत इष्टतम समाधान पर फिर से देखने की उम्मीद कर रहा हूं, लेकिन मुझे पहले जोड़ने के लिए अन्य कार्यक्षमता मिली है ...:/http://pianocheater.com fyi :) –
Argh !! यह एक अच्छा समाधान नहीं है (जिस पर मुझे गर्व नहीं है)। 4 गीगा रैम के साथ मेरी विस्टा मशीन पर, मैं प्रिंटर के डब्ल्यू, एच के साथ स्क्रीन संगत बिटमैप के कॉम्पैक्टिव बिटमैप नहीं बना सकता - स्मृति से बाहर - शायद ग्राफिक्स कार्ड मेमोरी की मात्रा के रूप में मुझे यकीन है कि 4 गीगा में फिट होगा नियमित स्मृति ड्राइंग बोर्ड पर वापस ... –
मुझे पता है कि यह थोड़ी देर पहले था, लेकिन क्या आपने कभी प्रिंटर संगत डीसी से बिटमैप बनाने का प्रयास किया था और फिर इसे अचयनित कर दिया था और इसे स्ट्रैचब्लैट के लिए एक नई स्क्रीन संगत डीसी में चुन रहा था? इसके अलावा आप बिटमैप के आयामों और समन्वय को 2 से विभाजित कर सकते हैं ताकि इसे बहुत अधिक विकृति के जोखिम के बिना फिट किया जा सके। –