سؤال

لقد تم ربطها في الماضي ل هذه استجابة لسؤال مماثل حول تحويل إحداثيات WPF بكسل إلى سطح المكتب، ومع ذلك، لست متأكدا من أنني أفهم الرياضيات المعنية.

تنص إجابة اغتيال "بكسل لكل وحدة WPF = حجم ConstantwPfunit * شاشة DPI؛" وأن "حجم وحدة WPF ثابت هو 1/96."

في حالتي، قمت بإجراء DPI من كائن الرسومات التي تم إنشاؤها من كائن الصورة النقطية (كما لم أستطع العثور على الخاصية تحدثت عملية الاستهلاك) التي قمت بإنشائها بعد أخذ لقطة شاشة لسطح المكتب، لذلك لدي:

Graphics g = Graphics.FromImage(bitmap);
float WpfUnit = (1 / 96) * g.DpiX;

بالنظر إلى أن DPI الذي يتم إرجاعه من كائن الرسومات هو 96، أنا غادرت

WpfUnit = (1 / 96) * 96 = 1

ومع ذلك، يخرج WPFunit ك 0 لسبب غير معروف (بالنسبة لي). الطريقة الوحيدة التي يمكنني رؤيتها لإصلاح هذا هو القول

if(WpfUnit == 0) WpfUnit = 1;

وحتى هذا لا يحل المشكلة حقا، حيث أن قيمة الارتفاع والقيم العليا، عند مضاعفة WPFunit كما هو مقترح في الإجابة المرتبطة، لا يوجد لديه أي شيء يجري مضروبة في 1.

لذلك، في الختام، ما زلت عالقا لتحويل البكسل WPF إلى بكسل سطح المكتب. اي مساهمه في هذا ستكون خدمة عظيمة.

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

المحلول

ماذا عن المدمج bointstoscreen. و pointfromscreen. طرق؟ أم هل فاتني شيء؟

نصائح أخرى

يخرج WPFunit على أنه صفر لأنه يقوم بعمل رياضيات عدد صحيح مع 1/96. تعلن صراحة تلك الأرقام كما يطفو.

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