سؤال

أنا بحاجة إلى تحويل بكسل نقطة في C#.لقد رأيت بعض تفسيرات معقدة حول هذا الموضوع, ولكن لا يمكن أن يبدو للعثور صيغة بسيطة.دعونا نفترض القياسية 96dpi كيف calulate هذا التحويل ؟

هل كانت مفيدة؟

المحلول

هناك 72 نقطة لكل بوصة;إذا يكفي أن نفترض 96 بكسل لكل انش, صيغة بسيطة إلى حد ما:

النقاط = بكسل * 72 / 96

هناك طريقة للحصول على تكوين بكسل لكل انش من الشاشة في ويندوز باستخدام GetDeviceCaps.مايكروسوفت لديها دليل يسمى "وضع نقطة في البوصة-علم التطبيقات", ابحث عن قسم "إنشاء نقطة في البوصة-علم الخطوط".

W3C حددت بكسل قياس px كما بالضبط 1/96 من 1in بغض النظر الفعلي دقة العرض ، لذا الصيغة أعلاه يجب أن تكون جيدة لجميع ويب العمل.

نصائح أخرى

جرب هذا إذا كان الرمز الخاص بك يكمن في شكل:

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

على افتراض 96dpi هو ضخمة خطأ.حتى إذا كان الافتراض هو الحق ، هناك أيضا خيار حجم الخطوط.حتى الخط تعيين 10نقطة قد يكون في الواقع تظهر كما لو انها 12.5 pt (125%).

بدءا معين:

  • هناك 72 نقطة في البوصة (هذا ما نقطة ، 1/72 بوصة)
  • على نظام مجموعة 150dpi هناك 150 بكسل لكل بوصة.
  • 1 = 72pt = 150px (على 150dpi الإعداد)

إذا كنت تريد أن تجد نقطة (pt) على أساس بكسل (px):

 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

WPF تحويل نقاط بكسل مع النظام.يقوم نظام ويندوز.FontSizeConverter.على FontSizeConverter يستخدم النظام.يقوم نظام ويندوز.LengthConverter.على LengthConverter يستخدم عامل 1.333333333333333333 لتحويل النقاط (ع) بكسل (x):x = p * 1.3333333333333333

النظام.الرسم.الرسومات قد DpiX و DpiY خصائص.DpiX بكسل لكل بوصة أفقيا.DpiY بكسل لكل بوصة عموديا.استخدام تلك لتحويل النقاط (72 نقطة لكل بوصة) إلى بكسل.

مثلا:14 الأفقي النقاط = (14 * DpiX) / 72 بكسل

بالتأكيد هذا كله ينبغي أن يكون السؤال:

"كيف يمكنني الحصول على الأفقي والرأسي نقطة في البوصة (بكسل لكل بوصة) من الشاشة؟"

هناك 72 نقطة في البوصة (حسب تعريف "نقطة" هو تعريف 1/72 بوصة ، وبالمثل "بيكا" ويعرف 1/72 قدم).مع هذين بت من المعلومات يمكنك التحويل من بكسل إلى حزب العمال والعودة بسهولة جدا.

في الواقع يجب أن يكون

points = pixels * 96 / 72

النقاط = (بكسل / 96) * 72 على مستوى XP/Vista/7 آلة (إعدادات المصنع الافتراضية)

النقاط = (بكسل / 72) * 72 على مستوى تشغيل ماك OSX (إعدادات المصنع الافتراضية)

تشغيل Windows الافتراضي في 96dpi (عرض) أجهزة ماكينتوش تشغيل الافتراضي في 72 نقطة في البوصة (عرض)

72 حاشية نقطة = 1 بوصة 12 حاشية نقطة = 1 حاشية بيكا 6 حاشية Picas = 72 نقطة = 1 بوصة

1 نقطة = 1⁄72 بوصة = 25.4⁄72 مم = 0.3527 ملم

نقطة في البوصة = عدد النقاط لكل بوصة PPI = بكسل لكل بوصة LPI = خطوط لكل بوصة

مزيد من المعلومات في حالة استخدام م قياس

16px = 1em (الافتراضي للنص العادي) 8em = 16px * 8 بكسل/16 = em

يعمل هذا:

int pixels = (int)((dp) * Resources.System.DisplayMetrics.Density + 0.5f);

ارتفاع خطوط تحويلها إلى نقاط بكسل (بلدي الفورمولا).هنا مثال مع الإدخال اليدوي من 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?أنا لا أعرف لكنه يعمل.)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top