पिक्सेल को पॉइंट्स में बदलें


126

मुझे पिक्सेल को P # में C # में बदलने की आवश्यकता है। मैंने विषय के बारे में कुछ जटिल व्याख्याएँ देखी हैं, लेकिन एक सरल सूत्र का पता नहीं लगा सकता। चलो एक मानक 96 डीपीआई मान लेते हैं, मैं इस रूपांतरण को कैसे शांत करूं?

जवाबों:


199

प्रति इंच 72 बिंदु हैं ; यदि यह 96 पिक्सेल प्रति इंच मानने के लिए पर्याप्त है, तो सूत्र सरल है:

अंक = पिक्सल * 72/96

Windows में आपके डिस्प्ले के प्रति इंच कॉन्फ़िगर किए गए पिक्सेल प्राप्त करने का एक तरीका है GetDeviceCaps। Microsoft के पास "विकासशील DPI-Aware अनुप्रयोग" नामक एक मार्गदर्शिका है , "DPI-Aware फ़ॉन्ट्स बनाना" अनुभाग देखें।

W3C ने पिक्सेल माप pxको आपके डिस्प्ले के वास्तविक रिज़ॉल्यूशन की परवाह किए बिना 1in के 1/96 वें हिस्से के रूप में परिभाषित किया है , इसलिए उपरोक्त फॉर्मूला सभी वेब काम के लिए अच्छा होना चाहिए।


26
72 अंक प्रति इंच एक तर्कपूर्ण आइटम नहीं है, यह बोर्ड भर में समान है!
मचेल सेलर्स

11
@ डेविड डीपीआई प्रदर्शन पर निर्भर है, पीपीआई एक टाइपोग्राफिक स्थिरांक है
कोरी रॉस

3
@ उस लेख को बताएं कि मॉनिटर क्यों परिवर्तनशील DPI है। पीपीआई अभी भी वही है। एक मील में किलोमीटर की संख्या आपके द्वारा ड्राइव की गई कार के आधार पर नहीं बदलती है। 96dpi को मान लेना आम तौर पर एक अच्छा विचार नहीं है, लेकिन अगर हम ऐसा करते हैं तो दिया गया सूत्र सही है।
क्वेंटिन

13
आमतौर पर पीपीआई प्रति इंच पिक्सल के लिए संक्षिप्त नाम है, अंक प्रति इंच नहीं। शायद यही वह भ्रम है जहाँ से आता है? अंक प्रति इंच हमेशा 72 होते हैं; लिंक Xetius के लिए धन्यवाद।
मार्क रैनसम

@ कोरी रॉस: वास्तव में, डीपीआई प्रिंटर पर निर्भर होगा, जबकि पीपीआई मॉनिटर का पेंडेंट होगा। लेकिन हर कोई गलत तरीके से PPI DPI कहता है ...
स्टीफन स्टीगर

58

यदि आपका कोड किसी प्रपत्र में निहित है, तो इसे आज़माएं:

Graphics g = this.CreateGraphics();
points = pixels * 72 / g.DpiX;
g.Dispose();

2
क्या यह इंगित करने के लायक है कि डीपीआईएक्स चौड़ाई के लिए है जहां डीपीवाईआई का उपयोग ऊंचाई के लिए किया जाना चाहिए?
5

25

96 डीपीआई मान लेना एक बहुत बड़ी गलती है। यहां तक ​​कि अगर धारणा सही है, तो फोंट को स्केल करने का विकल्प भी है। तो 10 के लिए सेट एक फ़ॉन्ट वास्तव में दिखाया जा सकता है जैसे कि यह 12.5pt (125%) है।


23

दिए गए के साथ शुरू:

  • एक इंच में 72 बिंदु होते हैं (जो एक बिंदु है, एक इंच का 1/72)
  • 150dpi के लिए सेट किए गए सिस्टम पर, प्रति इंच 150 पिक्सेल हैं।
  • 1 में = 72pt = 150px (150dpi सेटिंग के लिए)

यदि आप पिक्सेल (px) के आधार पर अंक (pt) खोजना चाहते हैं:

 72 pt    x pt
------ = -----                  (1) for 150dpi system
150 px    y px

उलटफेर करने पर:

x = (y/150) * 72                (2) for 150dpi system

इसलिए:

points = (pixels / 150) * 72    (3) for 150dpi system

1
पहले समीकरण में डीपीआई पीएक्स होना चाहिए - शर्तों को रद्द करने के लिए, क्योंकि हमारे पास 150 डीपीआई प्रणाली के लिए धारणा (1) है
जेसन एस

9

WPF, System.Windows.FontSizeConverter के साथ पिक्सल में पॉइंट्स को कनवर्ट करता है। FontSizeConverter System.Windows.LengthConverter का उपयोग करता है। लंबाईसंकेतक बिंदु (p) से पिक्सेल (x): x = p * 1.3333333333333333 में परिवर्तित करने के लिए कारक 1.3333333333333333 का उपयोग करता है।


कृपया यह भी बताएं कि यह मान क्यों उपयोग किया जाता है ... संयोगवश, यह 96 डीपीआई (डिस्प्ले के लिए विंडोज़ की डिफ़ॉल्ट डीपीआई) / 72 डीपीआई (डीपीआई है जो बिंदुओं पर परिभाषित हैं)।
QUIT - एनोनी-मूस

5

System.Drawing.Graphics में DpiX और DpiY गुण हैं। डीपीआईएक्स क्षैतिज रूप से प्रति इंच पिक्सेल है। डीपीवाईआई पिक्सल प्रति इंच लंबवत है। उन बिंदुओं (72 अंक प्रति इंच) से पिक्सेल में बदलने के लिए उपयोग करें।

Ex: 14 क्षैतिज बिंदु = (14 * DpiX) / 72 पिक्सेल


4

निश्चित रूप से यह पूरा प्रश्न होना चाहिए:

"मैं मॉनिटर के क्षैतिज और ऊर्ध्वाधर पीपीआई (पिक्सेल प्रति इंच) कैसे प्राप्त कर सकता हूं?"

एक इंच में 72 बिंदु हैं (परिभाषा के अनुसार, एक "बिंदु" को 1 इंच के 1/72 वें रूप में परिभाषित किया गया है, इसी तरह एक "पिका" को 1/72 वें चरण के रूप में परिभाषित किया गया है)। जानकारी के इन दो बिट्स के साथ आप px से pt में बदल सकते हैं और बहुत आसानी से वापस आ सकते हैं।


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

आपका मतलब है "मैं मॉनिटर की क्षैतिज और ऊर्ध्वाधर DPI कैसे प्राप्त करूं?"। PPI 72 की एक निरंतरता है। हमेशा से रहा है और हमेशा रहेगा।
Xetius

1
पिक्सेल प्रति इंच, अंक प्रति इंच (पिका) नहीं।
JeeBee

1
उम, उफ़, पिका नहीं! यह एक इंच का 1/6 वां हिस्सा है। अंक प्रति इंच बेमानी है, शब्द "अंक" है। एक "प्वाइंट" एक इंच का 1/72 वां है।
JeeBee

4

वास्तव में यह होना ही चाहिए

points = pixels * 96 / 72

1
यह गलत है अगर आप 96dpi, और 72ppi (अंक प्रति इंच) मान रहे हैं। यह अंक = पिक्सल * 72/96
जेसन एस

4

अंक = (पिक्सल / 96) * 72 एक मानक एक्सपी / विस्टा / 7 मशीन (कारखाना चूक) पर

अंक = (पिक्सेल / 72) * 72 एक मानक मैक पर चल रहा है जो OSX (फैक्टरी डिफॉल्ट) है

विंडोज 96 डीपीआई (डिसप्ले) पर डिफॉल्ट रूप से चलता है, मैक 72 डीपीआई (डिसप्ले) पर डिफॉल्ट के रूप में चलता है

72 POSTSCRIPT अंक = 1 इंच 12 POSTSCRIPT अंक = 1 POSTSCRIPT पिका 6 POSTSCRIPT पिकास = 72 अंक = 1 इंच

1 बिंदु = 1 =72 इंच = 25.4⁄72 मिमी = 0.3527 मिमी

डीपीआई = डॉट्स प्रति इंच पीपीआई = पिक्सल प्रति इंच एलपीआई = लाइनें प्रति इंच

अधिक जानकारी अगर उन्हें मापने के रूप में उपयोग कर रहे हैं

16px = 1em (सामान्य पाठ के लिए डिफ़ॉल्ट) 8em = 16px * 8 पिक्सेल / 16 = em



0

निम्नानुसार डीपीआई प्राप्त करने के लिए मैक पर wxPython का उपयोग करना:

    from wx import ScreenDC
    from wx import Size

    size: Size = ScreenDC().GetPPI()
    print(f'x-DPI: {size.GetWidth()} y-DPI: {size.GetHeight()}')

यह प्रदान करता है:

x-DPI: 72 y-DPI: 72

इस प्रकार, सूत्र है:

अंक: int = (पिक्सेलनंबर * 72) // 72


-1

ऊँचाई लाइनें बिंदुओं और पिक्सेल (मेरे अपने सूत्र) में परिवर्तित हो जाती हैं। पंक्ति ऊंचाई क्षेत्र में 213.67 अंकों की मैन्युअल प्रविष्टि के साथ यहां एक उदाहरण दिया गया है:

213.67  Manual Entry    
  0.45  Add 0.45    
214.12  Subtotal    
213.75  Round to a multiple of 0.75 
213.00  Subtract 0.75 provides manual entry converted by Excel  
284.00  Divide by 0.75 gives the number of pixels of height

यहां 213.67 पॉइंट की मैनुअल एंट्री 284 पिक्सल देती है।
यहां 213.68 पॉइंट की मैनुअल एंट्री 285 पिक्सल देती है।

(क्यों 0.45? मैं नहीं जानता लेकिन यह काम करता है।)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.