2016-01-21 7 views
7

मैं पिक्सेल में चौड़ाई का अनुमान लगाने का प्रयास कर रहा हूं यदि एक उपकरण में एक विशिष्ट फ़ॉन्ट (एरियल 18 पीएक्स) के लिए सी # का उपयोग कर क्रोम में एक पाठ प्रस्तुत किया जाएगा ।सी #: ब्राउज़र में पिक्सेल चौड़ाई मिलान पाठ

इस उपकरण के साथ अपने परिणामों की तुलना करना (ब्राउज़र का उपयोग करता चौड़ाई रेंडर करने के लिए): http://searchwilderness.com/tools/pixel-length/ स्ट्रिंग:

"Lorem ipsum dolor sit amet, consectetur adipiscing elit." 

439 पिक्सल चौड़ा होने की गणना की जाती है।

लेकिन सी # में इस कोड के साथ मैं 445px मिलती है:

var font = new Font("Arial", 18, FontStyle.Regular, GraphicsUnit.Pixel); 
var text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit."; 
var size = TextRenderer.MeasureText(text, font, new Size(int.MaxValue, int.MaxValue), TextFormatFlags.NoPadding); 

मैं तो यह ब्राउज़र के समान renders मेरी कोड को संशोधित कर सकते हैं?

मैंने फ़ॉन्ट और टेक्स्ट के साथ एक लेबल आउटपुट करने की कोशिश की है और ब्राउज़र प्रतिपादन की तुलना में वे मिलान करते हैं (+/- 1px)।

+5

शायद आप निम्न स्तर पर दो अलग-अलग विक्रेताओं की तुलना में बेहतर भाग्य प्राप्त करेंगे। आप ब्राउज़र को प्रोग्रामिंग भाषा से तुलना कर रहे हैं, वास्तव में जब ब्राउज़र वेबकिट का उपयोग करता है जो अपने स्वयं के कस्टम ड्राइंग एपीआई को परिभाषित कर सकता है जबकि एपीआई आप सी # में उपयोग कर रहे हैं तो जीडीआई +, डायरेक्टएक्स इत्यादि का उपयोग कर रहे हैं –

+1

आप ग्राफिक्स की तुलना कर सकते हैं। मेसायरस्ट्रिंग () StringFormat.GenericTypographic विकल्प के साथ। लेकिन वास्तव में: 43 9 बनाम 445 बहुत करीब आईएमओ है। – TaW

+0

आईई में कौन सा सही है, सर्चविल्डनेस क्रोम 435 पर 438 दे रहा है? – Anil

उत्तर

3

आप GDI उपयोग कर सकते हैं + StringFormat.GenericTypographic बजाय साथ:

var font = new System.Drawing.Font("Arial", 18, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel); 
var text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit."; 
var graphics = System.Drawing.Graphics.FromHwnd(IntPtr.Zero); 
var size = graphics.MeasureString(text, font, int.MaxValue, System.Drawing.StringFormat.GenericTypographic); 

यह भी देखें: https://stackoverflow.com/a/6404811

+0

एक आकर्षण की तरह काम किया! –

0

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

इससे बचने के लिए, क्लाइंट पर तर्क प्रस्तुत करना अधिक समझदार हो सकता है, जहां वास्तविक मान getTextWidth() के बराबर उपयोग करके पाया जा सकता है।

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