سؤال

أقوم بتطوير عنصر تحكم في الخريطة في WPF باستخدام C#.أنا أستخدم عنصر تحكم اللوحة على سبيل المثال.400 × 200 والتي تم تخصيص منطقة خريطة لها على سبيل المثال.2000 م × 1000 م.

حجم الخريطة سيكون: Canvas_size_in_meters / real_size_in_meters.

أريد العثور على Canvas_size_in_meters.

توفر اللوحة القماشية ActualWidth العرض في DIU (الوحدات المستقلة عن الجهاز).إذن، 400 وحدة DIU هي 400/96 = 4.17 بوصة، متاح أن بدني دقة شاشتي هي 96 نقطة في البوصة.

ومع ذلك، باستخدام المسطرة، وجدت أن الدقة الفعلية لشاشتي هي 87 نقطة في البوصة.(لا يوجد سوى عدد قليل من الشاشات التي تحتوي فعليًا على 96 نقطة في البوصة الفعلية)

يُترجم فرق DPI (10%) إلى اختلاف +10% في عرض التحكم الفعلي بالخريطة على الشاشة.

كيف يمكنني قياس حجم عنصر تحكم WPF بالبوصة بالضبط وبغض النظر عن دقة الشاشة وإعدادات DPI؟

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

المحلول

كيف يمكنني قياس حجم عنصر تحكم WPF بالبوصة بالضبط وبغض النظر عن دقة الشاشة وإعدادات DPI؟

هذا غير ممكن في الواقع، لأنه لكي يعمل، يجب أن يعرف WPF دقة الشاشة (من حيث DPI).يبدو الأمر جميلًا من الناحية النظرية، لكن من الناحية العملية لا تعرف النوافذ هذه المعلومات.هذا هو السبب في أن Windows نفسه يفترض دائمًا 96 نقطة في البوصة بشكل أعمى بدلاً من أن يكون أكثر ذكاءً في هذا الشأن.

حتى لو كانت هناك طريقة ما لإخبارها يدويًا، أو إذا كانت شاشتك الخاصة تحتوي على برنامج تشغيل مخصص يقوم بتمرير المعلومات الصحيحة إلى Windows، فلن يعمل هذا على كمبيوتر أي شخص آخر، لذلك لا يقوم Windows بتمرير هذه المعلومات إليه إلى أي تطبيقات.

أفضل ما يمكنك فعله هو رسم مقياس كما تفعل خرائط جوجل.أنت تعلم أن 1 بكسل == ميل واحد، حتى تتمكن من رسم خط بحجم 50 بكسل على خريطتك، مع تسمية تقول "هذا الخط يساوي 50 ميلًا"

نصائح أخرى

هناك طريقة لحساب حجم البكسل الحالي بالملليمتر أو البوصة.وكما ذكرنا في المنشورات السابقة، فهي ليست قيمة ثابتة وستختلف وفقًا للدقة الحالية وحجم الشاشة.

أولا الحصول على القرار الحالي.افترض أنه 1280 × 1024 الآن احصل على عرض الشاشة بالملح باستخدام وظيفة getDevicEcaps.إنها وظيفة مكتبة Windows القياسية.

int widthmm = GetDeviceCaps(deviceContext, HORZSIZE);عرض شاشتي هو 362 ملم

إذن حجم البكسل = 362/1280 = 0.282 ملم

تعتمد دقة هذه الطريقة على افتراض أن مساحة العرض تغطي عرض الشاشة تمامًا.

للإجابة على السؤال الأصلي ، سيكون حجم القماش 400 × 200 بكسل (400 * 0.282/1000) x (200 * 0.282/1000) بالأمتار عند عرضه على شاشتي.

شكرا لك على الرد السريع.

أنا أتفق تماما، ولكن لم أكن أريد أن أصدق ذلك في المقام الأول.كما ترى، يجب أن يكون هناك تقريبي حساب مقياس رسم الخريطة إذا تم استخدام الخريطة لعرض طبقات مختلفة من بيانات الخريطة (يعتمد على مقياس الرسم).تستخدم معظم التطبيقات عنصر تحكم شريط التمرير على سبيل المثال.10 مستويات خريطة منفصلة لضبط "المقياس".

إن وجود مقياس مطلق ليس أمرًا بالغ الأهمية للتطبيق، وسيكون من الجيد عرضه إرشادية مقياس مثل 1:15000.

سيتطلب المقياس المطلق وجود متغير إضافي مراقبة PhysicalDPI (تم ضبطه مبدئيًا على 96) أنه إذا اختارت الاستخدامات التغيير فستعطي مقياسًا أفضل قليلاً (مرة أخرى، هذا ليس مهمًا).سيكون حجم التحكم في الخريطة كما يلي:

الخريطة. العرض الفعلي * (96/شاشة PhysicalDPI) * بوصة لكل DIU، بوصة لكل DIU هو 1/96

مرة أخرى هذه مستحضرات تجميل..ألن يكون من الرائع أن يعرف Windows الأبعاد الفعلية لعنصر التحكم؟(يجب على المستخدم تقديم معلومات حول أبعاد الشاشة عند إعداد نظام التشغيل، أو ببساطة تثبيت ملف INF الخاص بالشاشة)

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