بررسی BitmapScalingMode در WPF نسخه 4
  علل کاهش کیفیت تصاویر Scale شده در نسخه چهارم WPF به صورت پیش فرض و نحوه اعمال تغییر بر روی آن.
   WPF
   ۱۶۴۰۲
   این مقاله حاوی فایل ضمیمه نمی باشد
   محمد (برنا) پورحسین
   ۱۳۸۹/۱۰/۱۸
ارسال لینک صفحه برای دوستان ارسال لینک صفحه برای دوستان  اضافه کردن به علاقه مندیها اضافه کردن به علاقه مندیها   نسخه قابل چاپ نسخه قابل چاپ

 

اگر از آخرین نسخه حال حاضر تکنولوژی NET. استفاده کرده باشید (NET 4.0.)، حتما متوجه شده اید که در پروژه های WPFتان، کیفیت برخی تصاویر در حالتی که عکس scale می شود، نسبت به نسخه قبلی (NET 3.5.) بی کیفیت تر نمایش داده می شود و یا حداقل اینطور به نظر می آید! این مسئله به این دلیل رخ می دهد، که مایکروسافت در این نسخه نحوه rescale کردن تصاویر در پروژه های WPF را تغییر داده است. یعنی به جای نمایش با کیفیت اصلی، تصویر با کیفیتی کاهش یافته به نمایش گزارده می شود... گفته میشود، مایکروسافت این کار را به جهت بهبود و تسریع در عملکرد پروژه انجام داده است.
تصاویر زیر نمونه ای است، که یک عکس را در هر کدام از نسخه های مذکور به نمایش گذاشته، تا موضوع روشن تر بیان شود. تنها کاری که انجام شده، این است که یک پروژه ایجاد شده و در هر 2 حالتِ نسخه های 3.5 و 4.0 از آن خروجی گرفته شده است. همانطور که مشهود است، تصویر سمت چپ، مربوط به نسخه 3.5 و تصویر سمت راست مربوط به نسخه 4.0 می باشد.

تصویر ساعت از: Paul R. Hayes
هیچ راهی جهت تغییر حالت پیش فرض ِ موجود، وجود ندارد. تنها کاری که می توان انجام داد این است که یک خط کدِ style در فایل App.xaml یا دیگر فایل های سطح بالا قرار دهیم، تا بتوان تغییر مورد نظر را بر روی تصویر اعمال کرد.


<Window.Resources>
    <Style
TargetType="{x:Type Image}">
        <Setter Property="RenderOptions.BitmapScalingMode"
               Value="HighQuality" />
    </Style>
</Window.Resources>

دو نوع حس متفاوت می توان در مورد این تغییر داشت: حس منفی اینکه این نقل مکان به نسخه NET 4.0. باعث شد که این پروژه کاملا کمی!!! متفاوت دیده شود. حس مثبت هم اینکه اعمال این تغییر (کم کردن کیفیت تصویر در حالت Scale شده) به صورت کامل، از طریق پردازنده گرافیکی (GPU) انجام می پذیرد. که این بدین معنی است که استفاده از این روش بر عکس استفاده از CPU جهت نمایش عکس با کیفیت اصلی ولی بالا، باعث اصلاح و بهبود عملکرد پروژه و تسریع در انجام آن خواهد شد.

منبع: switch on the code