{"id":61,"date":"2016-09-05T18:26:38","date_gmt":"2016-09-05T16:26:38","guid":{"rendered":"https:\/\/josjo.de\/Blog\/?p=61"},"modified":"2020-12-30T16:48:08","modified_gmt":"2020-12-30T15:48:08","slug":"skaling-interpolation","status":"publish","type":"post","link":"https:\/\/josjo.de\/Blog\/2016\/09\/05\/skaling-interpolation\/","title":{"rendered":"Skaling Interpolation"},"content":{"rendered":"<p>In dem WPF Steuerelement <em>Image<\/em> sehen Bilder oft sehr verauscht aus, wenn sie viel kleiner als in Originalaufl\u00f6sung dargestellt werden. Grund daf\u00fcr ist das\u00a0 Interpolationsverfahren: W\u00e4hrend bei der Darstellung in Originalaufl\u00f6sung jeder Pixel gezeigt wird, m\u00fcssen bei einer Verkleinerung des Bildes mehere Pixel zu jeweils einem neuen Pixel zusammengefasst werden. Je nach Verfahren entstehen dabei sehr scharfe Kanten.<!--more--><\/p>\n<p>Die standardm\u00e4\u00dfig in WPF verf\u00fcgbaren Interpolationsverfahren sind in der <a href=\"https:\/\/msdn.microsoft.com\/de-de\/library\/system.windows.media.bitmapscalingmode(v=vs.110).aspx\" target=\"_blank\" rel=\"noopener\"><em>BitmapScalingMode<\/em><\/a> Enumeration aufgelistet. Der <em><span class=\"selflink\">HighQuality<\/span><\/em> Mode liefert z.B. eine Interpolation, die scharfe Kanten beim Skalieren minimiert. Um einem <em>Image<\/em> Steuerelement eine solche Interpolation zuzuweisen, verwendet man die statische Methode <em>SetBitmapScalingMode(&#8230;)<\/em> der <em>RenderOptions<\/em> Klasse. Das kann z.B. direkt im Konstruktor des WPF Fensters geschehen:<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\npublic MainWindow()\r\n{\r\n  InitializeComponent();\r\n  RenderOptions.SetBitmapScalingMode(image1, BitmapScalingMode.HighQuality);\r\n}\r\n<\/pre>\n<p>Es folgt ein Vergleich in Bildform:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-68 size-full aligncenter\" src=\"https:\/\/josjo.de\/Blog\/wp-content\/uploads\/2016\/09\/imgInterpolation.png\" alt=\"imgInterpolation\" width=\"536\" height=\"243\" srcset=\"https:\/\/josjo.de\/Blog\/wp-content\/uploads\/2016\/09\/imgInterpolation.png 536w, https:\/\/josjo.de\/Blog\/wp-content\/uploads\/2016\/09\/imgInterpolation-300x136.png 300w\" sizes=\"auto, (max-width: 536px) 100vw, 536px\" \/><\/p>\n<p>Als Beispielbild wurde eine Aufnahme von Gras verwendet, welche ohnehin bereits recht scharfe Kanten besitzt. Das Bild links wurde mit dem Interpolationsverfahren <em>Linear<\/em> skaliert und das Bild rechts mit dem Interpolationsverfahren <em>HighQuality<\/em>.<\/p>\n<p>Man k\u00f6nnte sich nun fragen, warum nicht standardm\u00e4\u00dfig <em>HighQuality<\/em> f\u00fcr das Skaling verwendet wird. Ein m\u00f6glicher Grund w\u00e4re folgender: <em>HighQuality<\/em> ben\u00f6tigt bei seinen Berechnungen mehr Zeit als z.B. <em>Linear<\/em>. Das kann bei Animationen kritisch sein; diese beginnen dann unter Umst\u00e4nden zu ruckeln.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In dem WPF Steuerelement Image sehen Bilder oft sehr verauscht aus, wenn sie viel kleiner als in Originalaufl\u00f6sung dargestellt werden. Grund daf\u00fcr ist das\u00a0 Interpolationsverfahren: W\u00e4hrend bei der Darstellung in Originalaufl\u00f6sung jeder Pixel gezeigt wird, m\u00fcssen bei einer Verkleinerung des Bildes mehere Pixel zu jeweils einem neuen Pixel zusammengefasst werden. Je nach Verfahren entstehen dabei &hellip; <a href=\"https:\/\/josjo.de\/Blog\/2016\/09\/05\/skaling-interpolation\/\" class=\"more-link\"><span class=\"screen-reader-text\">Skaling Interpolation<\/span> weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[5,4],"class_list":["post-61","post","type-post","status-publish","format-standard","hentry","category-wpf","tag-bitmapscalingmode","tag-wpf"],"_links":{"self":[{"href":"https:\/\/josjo.de\/Blog\/wp-json\/wp\/v2\/posts\/61","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/josjo.de\/Blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/josjo.de\/Blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/josjo.de\/Blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/josjo.de\/Blog\/wp-json\/wp\/v2\/comments?post=61"}],"version-history":[{"count":33,"href":"https:\/\/josjo.de\/Blog\/wp-json\/wp\/v2\/posts\/61\/revisions"}],"predecessor-version":[{"id":611,"href":"https:\/\/josjo.de\/Blog\/wp-json\/wp\/v2\/posts\/61\/revisions\/611"}],"wp:attachment":[{"href":"https:\/\/josjo.de\/Blog\/wp-json\/wp\/v2\/media?parent=61"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/josjo.de\/Blog\/wp-json\/wp\/v2\/categories?post=61"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/josjo.de\/Blog\/wp-json\/wp\/v2\/tags?post=61"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}