لماذا أرى وحدات البكسل عند تكبير تطبيق WPF في Windows؟

StackOverflow https://stackoverflow.com/questions/4292015

  •  28-09-2019
  •  | 
  •  

سؤال

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

عند تشغيل طلبي والتكبير باستخدام تطبيق Machifier في Windows 7 (Win key + Plus key, ، واجهة المستخدم الرسومية المكبرة تعرض وحدات البكسل. ربما أنا مخطئ ، لأنني لا أستطيع أن أشرح ذلك على خلاف ذلك ، لكن ليس من المفترض أن تقدم WPF ناقلات مثل عرض السيطرة؟

شكرا للمشاركة في المناقشة.

قراءة المكافأة

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

المحلول

مرة أخرى عندما يتم شحن Vista لأول مرة ، وعندما كان WPF على الإصدار 3.0 ، فإن التكبير مع المكبر المدمج من شأنه أن يقوم بالفعل بالتوسع القائم على المتجه.

توقف هذا عن العمل عند شحن حزمة خدمة WPF 3.5. (لقد نجحت في 3.5 قبل SP1.) السبب الذي يجعله يعمل من قبل هو أن DWM (مدير نافذة سطح المكتب) - جزء من Windows المسؤول عن تقديم كل ما تراه على الشاشة - يستخدم milcore.dll للقيام بتقديمه. استخدم الإصداران 3.0 و 3.5 من WPF هذا المكون نفسه لتقديمه - وهذا يعني أن جميع محتوى WPF كان محتوى أصليًا ، إذا جاز التعبير. (في الواقع ، على نظام التشغيل Windows XP ، الذي لا يحتوي على DWM ، milcore.dll هو شيء يضعه WPF على نظامك لمصلحته الخاصة. لكنه مدمج في Vista و Windows 7.) عندما كان WPF يستخدم milcore.dll to to to to عرض على Vista ، سيتم تطبيق أي تأثيرات تطبقها DWM مثل التحجيم بالطريقة التي تريد WPF - لقد حدث بالفعل دون وجود بكسل.

لسوء الحظ ، لم يعد هذا هو الحال. والسبب هو أن WPF بدأ في إضافة ميزات عرض جديدة. في 3.5 SP1 ، كانت الميزة الجديدة المعنية دعمًا لتظليل البكسل المخصص. لتمكين ذلك ، كان على Microsoft إصدار تحديث إلى MIL. (طبقة تكامل الوسائط - الشيء الذي يقوم بالعرض الفعلي). ومع ذلك ، لم تكن في وضع يسمح لها بتحديث milcore.dll ، لأن هذا جزء من Windows - هو كيف يكون كل ما تراه على الشاشة على الشاشة. إن إطلاق نسخة جديدة من milcore.dll يعني بشكل فعال دفع تحديث إلى Windows. يعد جدول الإصدار لنظام التشغيل Windows مستقلاً عن ذلك لـ .NET ، وبالتالي فإن الطريقة الوحيدة التي يمكن بها لفريق WPF إضافة ميزات جديدة بشكل معقول هي شحن MIL جديد. (من الناحية النظرية ، كان بإمكانهم القيام بذلك عبر تحديث Windows ، ولكن نظرًا لأن WPF مملوك الآن من قبل قسم مختلف من Microsoft عن Windows ، فإن هذا النوع من الأشياء لا يحدث في الممارسة العملية.)

اعتبارًا من .NET 3.5 SP1 ، يكون MIL في DLL مختلفًا يسمى WPF_GFX_VXXXX.DLL حيث يكون VXXXX هو رقم الإصدار. في .NET 4.0 ، إنه wpf_gfx_v0400.dll.

الجانب العلوي هو أن WPF تحصل على إضافة ميزات عرض جديدة مع كل إصدار جديد ، دون الحاجة إلى تحديث Windows نفسه. الجانب السلبي هو أن عرض WPF لم يعد متكاملًا بإحكام مع Windows كما كان يعود لفترة وجيزة عندما يتم شحن Vista. والنتيجة النهائية هي ، كما رأيت ، أن التكبير ليس ممتعًا بقدر ما كان عليه الحال.

نصائح أخرى

ينفذ تطبيق Machifier من عرض الصور المكبر الخاص به ، ولهذا السبب ترى وحدات البكسل. يستخدم WPF رسومات المتجهات ، ولكن في هذه الحالة ، ليس تطبيق WPF نفسه هو الذي يجعل الصورة المكمرة.

إذا كنت تستخدم شيء مثل تجسس يمكنك رؤية تصغير وقياس رسومات متجه WPF.

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

يعتمد Windows-7-Magnifier على البكسل ، ولكن هناك اختلاف في وضع الكبرى اعتمادًا على Wether ، وهو موضوع جوي نشط أم لا.

  • مع موضوع areo Zoom هو pixelated.
  • بدون موضوع areo ، تم تسلح التكبير (ضبابية).

فقط مع موضوع AREO طرق العرض الأخرى (باستثناء "Docked") يمكن اختيارها.

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