2011-08-15 7 views
5

मुझे स्क्रीन पर खींचे गए पाठ की चौड़ाई को खोजने की आवश्यकता है। This thread बताता है कि FontMetrics.stringWidth() कभी-कभी FontMetrics.getStringBounds() के रूप में सटीक नहीं होगा।FontMetrics.stringWidth() और FontMetrics.getStringBounds() के बीच क्या अंतर है?

क्या किसी को पता है कि यह सही है, और यदि यह है, तो यह संदर्भ किस अंतर में दिखाई देता है? FontMetrics.stringWidth() को SwingUtilities.computeStringWidth() सहित अधिक बार उपयोग किया जाता है। इसके अलावा, स्पष्ट लाभ यह है कि इसे ग्राफिक्स ऑब्जेक्ट की आवश्यकता नहीं है, लेकिन यह स्वयं इस तथ्य के साथ संयुक्त है कि ग्राफिक्स ऑब्जेक्ट में एंटीअलाइजिंग और इसी तरह की सेटिंग्स को परिभाषित किया गया है, यह बता सकता है कि FontMetrics.getStringBounds() अधिक सटीक क्यों हो सकता है।

+2

भी देखें इस [क्यू एंड ए] (http://stackoverflow.com/questions/5979795/how-to-calculate-the-number-of-rows-and-columns-in-each-row-a- पाठ लेता-इन-ए जे/5998117 # 5998117)। – trashgod

उत्तर

5

getStringBounds, साथ काम करने के बारे में अधिक जानकारी नहीं है। यह उप-पिक्सेल ग्लाइफ प्लेसमेंट की गणना करने और ग्लाइफ आकारों पर एंटी-एलाइजिंग के प्रभावों के लिए इसका उपयोग करने के लिए इसका उपयोग कर सकता है। FontRenderContext के लिए दस्तावेज़ से:

विरोधी अलियासिंग और आंशिक-मीट्रिक एक आवेदन द्वारा निर्दिष्ट इसलिए भी कि पिक्सेल सीमाओं को गोलाई का एक चरित्र के आकार को प्रभावित कर सकते हैं।

4

मुझे लगता है कि उत्तर आपके प्रश्न में है। javadocs से:

stringWidth

ध्यान दें कि कुल अग्रिम चौड़ाई इस विधि से लौटे खाते में प्रतिपादन संदर्भ नहीं लेता है। इसलिए, एंटी-एलियासिंग और आंशिक मेट्रिक्स संकेत अग्रिम के मूल्य को प्रभावित कर सकते हैं। एंटी-एलाइजिंग और आंशिक मेट्रिक्स संकेतों को सक्षम करते समय, इस विधि के बजाय getStringBounds (स्ट्रिंग, ग्राफिक्स) का उपयोग करें। एक स्ट्रिंग का अग्रिम जरूरी नहीं है कि वह अपने पात्रों की प्रगति का योग हो। क्योंकि यह एक ग्राफिक्स पारित हो

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