2016-01-26 6 views
5

में टीटीएफ फ़ाइल से कर्नलिंग जोड़े तालिका को कैसे पढ़ा जाए, मैं वर्तमान में टीटीएफ फ़ाइल से लोड किए गए बाहरी (गैर-मानक) फ़ॉन्ट का उपयोग करते हुए कैनवास पर टेक्स्ट खींच रहा हूं। मैं जिस पाठ को प्रदर्शित कर रहा हूं उसके लिए मैं कर्नलिंग सक्षम करना चाहता हूं।Android

मैं क्या जानना चाहता हूं कि एंड्रॉइड एपीआई का उपयोग करके टाइपफेस से कर्नाई जोड़े को पढ़ने की संभावना है।

+0

[यह बड़े सवाल] (http://stackoverflow.com/q/1640659/2564301) (लेकिन हाल तक जवाब के साथ पिछले साल) सुझाव है कि कर्नेल टेबल जावा में प्रकट नहीं हैं। क्या कच्चे फ़ाइल डेटा को "मैन्युअल रूप से" एक व्यवहार्य विकल्प पार्स कर रहा है? (यह नोट करते हुए कि कई अलग-अलग टेबल प्रारूप हैं, सभी समान रूप से अत्याचारी ...) – usr2564301

+0

धन्यवाद, जोंगवेयर। मुझे पार्सिंग * .ttf फाइलें उपलब्ध नहीं हैं, वहां कुछ जानकारी है कि कर्नाई जोड़े को कहां देखना है (मैं आमतौर पर अत्याचारी प्रारूपों से थोड़ा डरता हूं)। –

+0

यह [ओपनटाइप विनिर्देशों] में होगा (https://www.microsoft.com/typography/otspec/default.htm), [कर्नलिंग टेबल] में सटीक होने के लिए (https://www.microsoft.com/ टाइपोग्राफी/otspec/kern.htm)। निश्चित रूप से दिल की बेहोशी के लिए नहीं; और यदि आप * वास्तव में * दुर्भाग्यपूर्ण हैं, तो आपके द्वारा उपयोग किया जाने वाला फ़ॉन्ट एक प्रकार 1 प्रकार है और इसलिए आपको 'जीपीओएस' सबटेबल को पार्स करना होगा, जो अभी तक अधिक कठिन है ... (यह भी बहुत कारण हो सकता है कैनवास 'ड्राटेक्स्ट' के प्रोग्रामर बस परेशान नहीं थे ...) – usr2564301

उत्तर

5

मैं क्या जानना चाहता हूं कि एंड्रॉइड एपीआई का उपयोग करके टाइपफेस से कर्नाई जोड़े को पढ़ने की संभावना है।

टीटीएफ फ़ाइल से कर्नाई जोड़े पढ़ने के लिए कोई सार्वजनिक एपीआई नहीं है। हालांकि, मैंने Apache FOP से प्रासंगिक कोड खींच लिया और आप this library का उपयोग कर कर्नाई जोड़े को पढ़ सकते हैं।

उदाहरण उपयोग:

TTFFile file = TTFFile.open(getAssets().open("fonts/font.ttf")); 
Map<Integer, Map<Integer, Integer>> kerning = file.getKerning(); 

तुम भी अन्य मेटाडाटा प्राप्त कर सकते हैं। उदाहरण:

TTFFile ttfFile = TTFFile.open(new File("/system/fonts/Roboto-Regular.ttf")); 

String name = ttfFile.getFullName();    // "Roboto Regular" 
String family = ttfFile.getSubFamilyName();  // "Regular" 
int fontWeight = ttfFile.getWeightClass();  // 400 
String copyright = ttfFile.getCopyrightNotice(); // "Font data copyright Google 2014" 

मैं पाठ मैं प्रदर्शित कर रहा हूँ के लिए कर्निंग सक्षम करना चाहते हैं।

देखें:

How to adjust text kerning in Android TextView?

setLetterSpacing(float)

+0

धन्यवाद, मैं इसे आज़मा दूंगा और आपको वापस ले जाऊंगा। 'SetSpacing()' विधि के लिए, यह काफी समान नहीं है क्योंकि अंतराल स्ट्रिंग के सभी वर्णों पर सेट किया गया है जबकि कर्नेलिंग केवल विशिष्ट वर्ण जोड़े के लिए समायोजित की जाती है। –

+1

क्या आपने पुस्तकालय की कोशिश की है? यदि आवश्यक हो तो मैं इसे मैवेन में अपलोड कर सकता हूं। मैंने इस पर कुछ घंटे बिताए ताकि उम्मीद है कि समय आपके प्रोजेक्ट के लिए उपयोगी था :-) –

+0

तो ...पहले मानचित्र की कुंजी जोड़ी में पहले चरित्र का कोड है? तो 'kerning.get (firstChar)' को एक जोड़ी में 'firstChar' से जुड़े सभी charcters का नक्शा वापस करना चाहिए। और इस प्रकार 'kerning.get (firstChar) .get (secondChar)' को 'पहली बार' वाली 'जोड़ी' के बाद ऑफसेट के लिए ऑफसेट वापस कर देना चाहिए। सही? वास्तविक मूल्य का क्या अर्थ है? उदाहरण के लिए, '-40'। क्या यह चौड़ाई का प्रतिशत है जिसके द्वारा मुझे दूसरे चरित्र को स्थानांतरित करना चाहिए (ऋणात्मक - बाईं ओर)? कृपया समझाएँ। –