https://en.wikipedia.org/w/index.php?action=history&feed=atom&title=Pixel-art_scaling_algorithms Pixel-art scaling algorithms - Revision history 2025-06-01T02:39:21Z Revision history for this page on the wiki MediaWiki 1.45.0-wmf.3 https://en.wikipedia.org/w/index.php?title=Pixel-art_scaling_algorithms&diff=1292213470&oldid=prev OAbot: Open access bot: url-access updated in citation with #oabot. 2025-05-25T20:01:39Z <p><a href="/wiki/Wikipedia:OABOT" class="mw-redirect" title="Wikipedia:OABOT">Open access bot</a>: url-access updated in citation with #oabot.</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 20:01, 25 May 2025</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 195:</td> <td colspan="2" class="diff-lineno">Line 195:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Kopf–Lischinski ===</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Kopf–Lischinski ===</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>The Kopf–Lischinski algorithm is a novel way to extract resolution-independent [[vector graphics]] from pixel art described in the 2011 paper "Depixelizing Pixel Art".&lt;ref name="pixelart"&gt;{{cite journal|author=Johannes Kopf and Dani Lischinski|title=Depixelizing pixel art|journal=ACM Transactions on Graphics|year=2011|volume=30|issue=4|pages=99:1–99:8|doi=10.1145/2010324.1964994|url=http://johanneskopf.de/publications/pixelart/|publisher=[[SIGGRAPH]]|access-date=2016-05-22|archive-date=2016-05-13|archive-url=https://web.archive.org/web/20160513111621/http://johanneskopf.de/publications/pixelart/|url-status=live}}&lt;/ref&gt; A Python implementation is available.&lt;ref&gt;{{cite web |last1=Vemula |first1=Anirudh |last2=Yeddu |first2=Vamsidhar |title=Pixel-Art: We implement the famous "Depixelizing Pixel Art" paper by Kopf and Lischinski |website=[[GitHub]] |url=https://github.com/vvanirudh/Pixel-Art |date=29 April 2019 |access-date=7 May 2019 |archive-date=11 June 2018 |archive-url=https://web.archive.org/web/20180611022300/https://github.com/vvanirudh/Pixel-Art |url-status=live }}&lt;/ref&gt;</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>The Kopf–Lischinski algorithm is a novel way to extract resolution-independent [[vector graphics]] from pixel art described in the 2011 paper "Depixelizing Pixel Art".&lt;ref name="pixelart"&gt;{{cite journal|author=Johannes Kopf and Dani Lischinski|title=Depixelizing pixel art|journal=ACM Transactions on Graphics|year=2011|volume=30|issue=4|pages=99:1–99:8|doi=10.1145/2010324.1964994|url=http://johanneskopf.de/publications/pixelart/|publisher=[[SIGGRAPH]]|access-date=2016-05-22|archive-date=2016-05-13|archive-url=https://web.archive.org/web/20160513111621/http://johanneskopf.de/publications/pixelart/|url-status=live<ins style="font-weight: bold; text-decoration: none;">|url-access=subscription</ins>}}&lt;/ref&gt; A Python implementation is available.&lt;ref&gt;{{cite web |last1=Vemula |first1=Anirudh |last2=Yeddu |first2=Vamsidhar |title=Pixel-Art: We implement the famous "Depixelizing Pixel Art" paper by Kopf and Lischinski |website=[[GitHub]] |url=https://github.com/vvanirudh/Pixel-Art |date=29 April 2019 |access-date=7 May 2019 |archive-date=11 June 2018 |archive-url=https://web.archive.org/web/20180611022300/https://github.com/vvanirudh/Pixel-Art |url-status=live }}&lt;/ref&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>The algorithm has been ported to GPUs and optimized for real-time rendering. The [[source code]] is available for this variant.&lt;ref&gt;{{cite book |last1=Kreuzer |first1=Felix |last2=Kopf |first2=Johannes |last3=Wimmer |first3=Michael |title=Proceedings of the 19th Symposium on Interactive 3D Graphics and Games |chapter=Depixelizing pixel art in real-time |date=2015 |pages=130 |doi=10.1145/2699276.2721395 |chapter-url=https://www.cg.tuwien.ac.at/research/publications/2015/KREUZER-2015-DPA |publisher=ACM |isbn=9781450333924 |s2cid=7592555 |access-date=2019-05-07 |archive-date=2019-05-07 |archive-url=https://web.archive.org/web/20190507061859/https://www.cg.tuwien.ac.at/research/publications/2015/KREUZER-2015-DPA/ |url-status=live }}&lt;/ref&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>The algorithm has been ported to GPUs and optimized for real-time rendering. The [[source code]] is available for this variant.&lt;ref&gt;{{cite book |last1=Kreuzer |first1=Felix |last2=Kopf |first2=Johannes |last3=Wimmer |first3=Michael |title=Proceedings of the 19th Symposium on Interactive 3D Graphics and Games |chapter=Depixelizing pixel art in real-time |date=2015 |pages=130 |doi=10.1145/2699276.2721395 |chapter-url=https://www.cg.tuwien.ac.at/research/publications/2015/KREUZER-2015-DPA |publisher=ACM |isbn=9781450333924 |s2cid=7592555 |access-date=2019-05-07 |archive-date=2019-05-07 |archive-url=https://web.archive.org/web/20190507061859/https://www.cg.tuwien.ac.at/research/publications/2015/KREUZER-2015-DPA/ |url-status=live }}&lt;/ref&gt;</div></td> </tr> </table> OAbot https://en.wikipedia.org/w/index.php?title=Pixel-art_scaling_algorithms&diff=1271107522&oldid=prev StainedGlassCavern: /* hqnx family */ disambiguate 2025-01-22T16:50:36Z <p><span class="autocomment">hqnx family: </span> disambiguate</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 16:50, 22 January 2025</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 158:</td> <td colspan="2" class="diff-lineno">Line 158:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== hq''n''x family ===</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== hq''n''x family ===</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>{{main|hqx}}</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>{{main|hqx<ins style="font-weight: bold; text-decoration: none;"> (algorithm)</ins>}}</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><del style="font-weight: bold; text-decoration: none;">[[</del>Maxim Stepin<del style="font-weight: bold; text-decoration: none;">]]</del>'s hq2x, hq3x, and hq4x are for scale factors of 2:1, 3:1, and 4:1 respectively. Each work by comparing the color value of each pixel to those of its eight immediate neighbors, marking the neighbors as close or distant, and using a pre-generated lookup table to find the proper proportion of input pixels' values for each of the 4, 9 or 16 corresponding output pixels. The hq3x family will perfectly smooth any diagonal line whose slope is ±0.5, ±1, or ±2 and which is not anti-aliased in the input; one with any other slope will alternate between two slopes in the output. It will also smooth very tight curves. Unlike 2xSaI, it anti-aliases the output.&lt;ref&gt;{{ cite web | last = Stepin | first = Maxim | url = http://www.hiend3d.com/hq3x.html | title = hq3x Magnification Filter | access-date = 2007-07-03 | url-status = dead | archive-url = https://web.archive.org/web/20070703061942/http://www.hiend3d.com/hq3x.html | archive-date = 2007-07-03 }}&lt;/ref&gt;&lt;ref name="pixelscalers" /&gt;</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Maxim Stepin's hq2x, hq3x, and hq4x are for scale factors of 2:1, 3:1, and 4:1 respectively. Each work by comparing the color value of each pixel to those of its eight immediate neighbors, marking the neighbors as close or distant, and using a pre-generated lookup table to find the proper proportion of input pixels' values for each of the 4, 9 or 16 corresponding output pixels. The hq3x family will perfectly smooth any diagonal line whose slope is ±0.5, ±1, or ±2 and which is not anti-aliased in the input; one with any other slope will alternate between two slopes in the output. It will also smooth very tight curves. Unlike 2xSaI, it anti-aliases the output.&lt;ref&gt;{{ cite web | last = Stepin | first = Maxim | url = http://www.hiend3d.com/hq3x.html | title = hq3x Magnification Filter | access-date = 2007-07-03 | url-status = dead | archive-url = https://web.archive.org/web/20070703061942/http://www.hiend3d.com/hq3x.html | archive-date = 2007-07-03 }}&lt;/ref&gt;&lt;ref name="pixelscalers" /&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>{{Gallery</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>{{Gallery</div></td> </tr> </table> StainedGlassCavern https://en.wikipedia.org/w/index.php?title=Pixel-art_scaling_algorithms&diff=1248896953&oldid=prev Lord Nightmare: fix accidental "vandalism" by wikicleanerbot where it mis-recognized part of a diagram as an empty list item 2024-10-02T01:41:23Z <p>fix accidental &quot;vandalism&quot; by wikicleanerbot where it mis-recognized part of a diagram as an empty list item</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 01:41, 2 October 2024</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 31:</td> <td colspan="2" class="diff-lineno">Line 31:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>The degenerate case:</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>The degenerate case:</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;pre&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;pre&gt;</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><del style="font-weight: bold; text-decoration: none;"> </del>*</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;"> </ins>*</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>* *</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;"> </ins>* *</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><del style="font-weight: bold; text-decoration: none;"> </del>*</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;"> </ins>*</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;/pre&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;/pre&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>becomes:</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>becomes:</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;pre&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;pre&gt;</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div> **<del style="font-weight: bold; text-decoration: none;"> </del></div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;"> </ins> **</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><del style="font-weight: bold; text-decoration: none;"> </del>****<del style="font-weight: bold; text-decoration: none;"> </del></div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;"> </ins>****</div></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div> ******</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><br /></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div> ****</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div> <ins style="font-weight: bold; text-decoration: none;">**</ins>****</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div> **</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div> <ins style="font-weight: bold; text-decoration: none;">**</ins>**</div></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div> **</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;/pre&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;/pre&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> </table> Lord Nightmare https://en.wikipedia.org/w/index.php?title=Pixel-art_scaling_algorithms&diff=1241620671&oldid=prev Georgebrown5566: /* Edge-directed interpolation (EDI) */ minor grammar changes 2024-08-22T07:21:19Z <p><span class="autocomment">Edge-directed interpolation (EDI): </span> minor grammar changes</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 07:21, 22 August 2024</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 200:</td> <td colspan="2" class="diff-lineno">Line 200:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Edge-directed interpolation (EDI) ===</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Edge-directed interpolation (EDI) ===</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>{{tone|section|date=May 2016}}</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>{{tone|section|date=May 2016}}</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Edge-directed interpolation (EDI) describes upscaling techniques that use statistical sampling to ensure the quality of an image <del style="font-weight: bold; text-decoration: none;">when scaling</del> it up.&lt;ref&gt;{{Cite web|url=http://chiranjivi.tripod.com/EDITut.html|title=Edge-Directed Interpolation|website=chiranjivi.tripod.com|access-date=2019-05-07|archive-date=2016-02-25|archive-url=https://web.archive.org/web/20160225134822/http://chiranjivi.tripod.com/EDITut.html|url-status=live}}&lt;/ref&gt;&lt;ref&gt;{{Cite web|url=https://forum.doom9.org/showthread.php?s=7fb2fb184cfe82b7d76b63bb26df481a&amp;t=170727|title=Shader implementation of the NEDI algorithm - Doom9's Forum|website=forum.doom9.org|access-date=2019-05-07|archive-date=2022-05-13|archive-url=https://web.archive.org/web/20220513124234/https://forum.doom9.org/showthread.php?s=7fb2fb184cfe82b7d76b63bb26df481a&amp;t=170727|url-status=live}}&lt;/ref&gt; There were several earlier methods that involved detecting edges to generate blending weights for linear interpolation or classifying pixels according to their neighbor conditions and using different otherwise isotropic interpolation schemes based on the classification.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Edge-directed interpolation (EDI) describes upscaling techniques that use statistical sampling to ensure the quality of an image <ins style="font-weight: bold; text-decoration: none;">as</ins> it<ins style="font-weight: bold; text-decoration: none;"> is scaled</ins> up.&lt;ref&gt;{{Cite web|url=http://chiranjivi.tripod.com/EDITut.html|title=Edge-Directed Interpolation|website=chiranjivi.tripod.com|access-date=2019-05-07|archive-date=2016-02-25|archive-url=https://web.archive.org/web/20160225134822/http://chiranjivi.tripod.com/EDITut.html|url-status=live}}&lt;/ref&gt;&lt;ref&gt;{{Cite web|url=https://forum.doom9.org/showthread.php?s=7fb2fb184cfe82b7d76b63bb26df481a&amp;t=170727|title=Shader implementation of the NEDI algorithm - Doom9's Forum|website=forum.doom9.org|access-date=2019-05-07|archive-date=2022-05-13|archive-url=https://web.archive.org/web/20220513124234/https://forum.doom9.org/showthread.php?s=7fb2fb184cfe82b7d76b63bb26df481a&amp;t=170727|url-status=live}}&lt;/ref&gt; There were several earlier methods that involved detecting edges to generate blending weights for linear interpolation or classifying pixels according to their neighbor conditions and using different otherwise isotropic interpolation schemes based on the classification.</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><del style="font-weight: bold; text-decoration: none;">Any given</del> interpolation approach boils down to weighted averages of neighboring pixels. The goal is to find optimal weights. [[Bilinear interpolation]] sets all the weights to be equal. Higher-order interpolation methods <del style="font-weight: bold; text-decoration: none;">like</del> [[bicubic interpolation|bicubic]] or [[sinc interpolation]] consider a larger number of neighbors than just the adjacent ones.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;">Each</ins> interpolation approach boils down to weighted averages of neighboring pixels. The goal is to find<ins style="font-weight: bold; text-decoration: none;"> the</ins> optimal weights. [[Bilinear interpolation]] sets all the weights to be equal. Higher-order interpolation methods <ins style="font-weight: bold; text-decoration: none;">such as</ins> [[bicubic interpolation|bicubic]] or [[sinc interpolation]] consider a larger number of neighbors than just the adjacent ones.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==== NEDI ====</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==== NEDI ====</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>NEDI (New Edge-Directed Interpolation) computes local covariances in the original image and uses them to adapt the interpolation at high resolution. It is the <del style="font-weight: bold; text-decoration: none;">prototypic</del> filter of this family.&lt;ref name=":0" /&gt;</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>NEDI (New Edge-Directed Interpolation) computes local covariances in the original image and uses them to adapt the interpolation at high resolution. It is the <ins style="font-weight: bold; text-decoration: none;">prototype</ins> filter of this family.&lt;ref name=":0" /&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==== EDIUpsizer ====</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==== EDIUpsizer ====</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Line 222:</td> <td colspan="2" class="diff-lineno">Line 222:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==== NNEDI ====</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==== NNEDI ====</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>NNEDI is a family of intra-field [[Deinterlacing|deinterlacers]] <del style="font-weight: bold; text-decoration: none;">which</del> can also be used <del style="font-weight: bold; text-decoration: none;">to</del> <del style="font-weight: bold; text-decoration: none;">enlarge</del> images by powers of two. When being used as a deinterlacer, it takes in a [[Film frame|frame]], throws away one [[Field (video)|field]], and then interpolates the missing pixels using only information from the kept field. There are so far three major generations of NNEDI.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>NNEDI is a family of intra-field [[Deinterlacing|deinterlacers]] <ins style="font-weight: bold; text-decoration: none;">that</ins> can also be used <ins style="font-weight: bold; text-decoration: none;">for</ins> <ins style="font-weight: bold; text-decoration: none;">enlarging</ins> images by powers of two. When being used as a deinterlacer, it takes in a [[Film frame|frame]], throws away one [[Field (video)|field]], and then interpolates the missing pixels using only<ins style="font-weight: bold; text-decoration: none;"> the</ins> information from the kept field. There are so far three major generations of NNEDI.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>NNEDI, the original version, works with [[YUY2]] and [[YV12]] input.&lt;ref&gt;{{cite web|url=http://forum.doom9.org/showthread.php?t=129953|title=NNEDI - intra-field deinterlacing filter - Doom9's Forum|access-date=19 February 2016|archive-date=2 March 2016|archive-url=https://web.archive.org/web/20160302100745/http://forum.doom9.org/showthread.php?t=129953|url-status=live}}&lt;/ref&gt; NNEDI2 added RGB24 support and a special function &lt;code&gt;nnedi2_rpow2&lt;/code&gt; for upscaling. NNEDI3 <del style="font-weight: bold; text-decoration: none;">enhances</del> NNEDI2 with a predictor [[neural network]]. Both the size of the network and the neighborhood it examines can be <del style="font-weight: bold; text-decoration: none;">tweaked</del> for a speed-quality tradeoff:&lt;ref&gt;{{Cite web|url=http://avisynth.nl/index.php/Nnedi3|title=Nnedi3|website=AviSynth|access-date=2019-05-07|archive-date=2019-05-07|archive-url=https://web.archive.org/web/20190507054547/http://avisynth.nl/index.php/Nnedi3|url-status=live}}&lt;/ref&gt;&lt;blockquote&gt;This is a quality vs speed option; however, differences are usually small between the number of neurons for a specific resize factor, however the performance difference between the count of neurons becomes larger as you quadruple the image size. If you are only planning on doubling the resolution then you won't see massive differences between 16 and 256 neurons. There is still a noticeable difference between the highest and lowest options, but not orders of magnitude different.&lt;ref&gt;{{Citation|last=tritical|title=nnedi3 - Readme.txt|date=2019-04-30|url=https://github.com/jpsdr/NNEDI3|access-date=2019-05-07|archive-date=2019-04-17|archive-url=https://web.archive.org/web/20190417055010/https://github.com/jpsdr/NNEDI3|url-status=live}}&lt;/ref&gt;&lt;/blockquote&gt;</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>NNEDI, the original version, works with [[YUY2]] and [[YV12]] input.&lt;ref&gt;{{cite web|url=http://forum.doom9.org/showthread.php?t=129953|title=NNEDI - intra-field deinterlacing filter - Doom9's Forum|access-date=19 February 2016|archive-date=2 March 2016|archive-url=https://web.archive.org/web/20160302100745/http://forum.doom9.org/showthread.php?t=129953|url-status=live}}&lt;/ref&gt; NNEDI2 added RGB24 support and a special function &lt;code&gt;nnedi2_rpow2&lt;/code&gt; for upscaling. NNEDI3 <ins style="font-weight: bold; text-decoration: none;">extends</ins> NNEDI2 with a predictor [[neural network]]. Both the size of the network and the neighborhood it examines can be <ins style="font-weight: bold; text-decoration: none;">tuned</ins> for a speed-quality tradeoff:&lt;ref&gt;{{Cite web|url=http://avisynth.nl/index.php/Nnedi3|title=Nnedi3|website=AviSynth|access-date=2019-05-07|archive-date=2019-05-07|archive-url=https://web.archive.org/web/20190507054547/http://avisynth.nl/index.php/Nnedi3|url-status=live}}&lt;/ref&gt;&lt;blockquote&gt;This is a quality vs speed option; however, differences are usually small between the number of neurons for a specific resize factor, however the performance difference between the count of neurons becomes larger as you quadruple the image size. If you are only planning on doubling the resolution then you won't see massive differences between 16 and 256 neurons. There is still a noticeable difference between the highest and lowest options, but not orders of magnitude different.&lt;ref&gt;{{Citation|last=tritical|title=nnedi3 - Readme.txt|date=2019-04-30|url=https://github.com/jpsdr/NNEDI3|access-date=2019-05-07|archive-date=2019-04-17|archive-url=https://web.archive.org/web/20190417055010/https://github.com/jpsdr/NNEDI3|url-status=live}}&lt;/ref&gt;&lt;/blockquote&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== References ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== References ==</div></td> </tr> </table> Georgebrown5566 https://en.wikipedia.org/w/index.php?title=Pixel-art_scaling_algorithms&diff=1239298546&oldid=prev BugBear2: linked ROM to the page of 'rad-only memory' 2024-08-08T14:05:03Z <p>linked ROM to the page of &#039;rad-only memory&#039;</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 14:05, 8 August 2024</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 13:</td> <td colspan="2" class="diff-lineno">Line 13:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== SAA5050 'Diagonal Smoothing' ===</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== SAA5050 'Diagonal Smoothing' ===</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>The [[Mullard SAA5050]] Teletext character generator chip (1980) used a primitive pixel scaling algorithm to generate higher-resolution characters on the screen from a lower-resolution representation from its internal ROM. Internally, each character shape was defined on a {{resx|5x9}} pixel grid, which was then interpolated by smoothing diagonals to give a {{resx|10x18}} pixel character, with a characteristically angular shape, surrounded to the top and the left by two pixels of blank space. The algorithm only works on monochrome source data, and assumes the source pixels will be logically true or false depending on whether they are 'on' or 'off'. Pixels 'outside the grid pattern' are assumed to be off.&lt;ref&gt;{{cite web |url=https://amigan.yatho.com/saa5050.pdf |title=Mullard SAA5050 Datasheet |access-date=2018-11-12 |archive-date=2017-06-19 |archive-url=https://web.archive.org/web/20170619025049/http://amigan.yatho.com/saa5050.pdf |url-status=dead }}&lt;/ref&gt;&lt;ref&gt;{{cite web |url=https://github.com/mamedev/mame/blob/master/src/devices/video/saa5050.cpp#L445 |title=SAA5050 Smoothing source code from the MAME project |website=[[GitHub]] |date=6 November 2022 |access-date=12 November 2018 |archive-date=13 August 2023 |archive-url=https://web.archive.org/web/20230813180715/https://github.com/mamedev/mame/blob/master/src/devices/video/saa5050.cpp#L445 |url-status=live }}&lt;/ref&gt;&lt;ref&gt;{{cite web |url=https://forums.bannister.org/ubbthreads.php?ubb=showflat&amp;Number=102137#Post102137 |title=Forum post showing Teletext reference test page on SAA5050 chip |access-date=2018-11-12 |archive-date=2018-11-13 |archive-url=https://web.archive.org/web/20181113025514/https://forums.bannister.org/ubbthreads.php?ubb=showflat&amp;Number=102137#Post102137 |url-status=live }}&lt;/ref&gt;</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>The [[Mullard SAA5050]] Teletext character generator chip (1980) used a primitive pixel scaling algorithm to generate higher-resolution characters on the screen from a lower-resolution representation from its internal <ins style="font-weight: bold; text-decoration: none;">[[Read-only memory|</ins>ROM<ins style="font-weight: bold; text-decoration: none;">]]</ins>. Internally, each character shape was defined on a {{resx|5x9}} pixel grid, which was then interpolated by smoothing diagonals to give a {{resx|10x18}} pixel character, with a characteristically angular shape, surrounded to the top and the left by two pixels of blank space. The algorithm only works on monochrome source data, and assumes the source pixels will be logically true or false depending on whether they are 'on' or 'off'. Pixels 'outside the grid pattern' are assumed to be off.&lt;ref&gt;{{cite web |url=https://amigan.yatho.com/saa5050.pdf |title=Mullard SAA5050 Datasheet |access-date=2018-11-12 |archive-date=2017-06-19 |archive-url=https://web.archive.org/web/20170619025049/http://amigan.yatho.com/saa5050.pdf |url-status=dead }}&lt;/ref&gt;&lt;ref&gt;{{cite web |url=https://github.com/mamedev/mame/blob/master/src/devices/video/saa5050.cpp#L445 |title=SAA5050 Smoothing source code from the MAME project |website=[[GitHub]] |date=6 November 2022 |access-date=12 November 2018 |archive-date=13 August 2023 |archive-url=https://web.archive.org/web/20230813180715/https://github.com/mamedev/mame/blob/master/src/devices/video/saa5050.cpp#L445 |url-status=live }}&lt;/ref&gt;&lt;ref&gt;{{cite web |url=https://forums.bannister.org/ubbthreads.php?ubb=showflat&amp;Number=102137#Post102137 |title=Forum post showing Teletext reference test page on SAA5050 chip |access-date=2018-11-12 |archive-date=2018-11-13 |archive-url=https://web.archive.org/web/20181113025514/https://forums.bannister.org/ubbthreads.php?ubb=showflat&amp;Number=102137#Post102137 |url-status=live }}&lt;/ref&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>The algorithm works as follows:</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>The algorithm works as follows:</div></td> </tr> </table> BugBear2 https://en.wikipedia.org/w/index.php?title=Pixel-art_scaling_algorithms&diff=1234536434&oldid=prev Scg9404: Grammar and readability 2024-07-14T21:32:07Z <p>Grammar and readability</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 21:32, 14 July 2024</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 8:</td> <td colspan="2" class="diff-lineno">Line 8:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>These specialized algorithms can improve the appearance of pixel-art graphics, but in doing so they introduce changes. Such changes may be undesirable, especially if the goal is to faithfully reproduce the original appearance.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>These specialized algorithms can improve the appearance of pixel-art graphics, but in doing so they introduce changes. Such changes may be undesirable, especially if the goal is to faithfully reproduce the original appearance.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Since a typical application of this technology is improving the appearance of [[history of video game consoles (fourth generation)|fourth-generation]] and earlier [[video game]]s on [[video game console emulator|arcade and console emulators]], many pixel art scaling algorithms are designed to run in real-time for sufficiently small input images at 60-[[frames per second]]. This places constraints on the type of [[computer programming|programming]] techniques that can be used for this sort of real-time processing.{{citation needed|date=June 2023|reason=Unclear what constraints this refers to as scaling algorithms can usually be parallelized and the source resolution would be low.}} Many work only on specific scale factors<del style="font-weight: bold; text-decoration: none;">, with</del> 2× <del style="font-weight: bold; text-decoration: none;">being</del> the most <del style="font-weight: bold; text-decoration: none;">commonly</del> <del style="font-weight: bold; text-decoration: none;">used</del> and 3×, 4×, 5×, and 6× less used.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Since a typical application of this technology is improving the appearance of [[history of video game consoles (fourth generation)|fourth-generation]] and earlier [[video game]]s on [[video game console emulator|arcade and console emulators]], many pixel art scaling algorithms are designed to run in real-time for sufficiently small input images at 60-[[frames per second]]. This places constraints on the type of [[computer programming|programming]] techniques that can be used for this sort of real-time processing.{{citation needed|date=June 2023|reason=Unclear what constraints this refers to as scaling algorithms can usually be parallelized and the source resolution would be low.}} Many work only on specific scale factors<ins style="font-weight: bold; text-decoration: none;">.</ins> 2× <ins style="font-weight: bold; text-decoration: none;">is</ins> the most <ins style="font-weight: bold; text-decoration: none;">common</ins> <ins style="font-weight: bold; text-decoration: none;">scale factor, while</ins> and 3×, 4×, 5×, and 6×<ins style="font-weight: bold; text-decoration: none;"> exist but are</ins> less used.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Algorithms ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Algorithms ==</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Line 191:</td> <td colspan="2" class="diff-lineno">Line 191:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==== Fast RotSprite ====</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==== Fast RotSprite ====</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Fast RotSprite is a fast rotation algorithm for pixel art developed by Oleg Mekekechko for [https://play.google.com/store/apps/details?id=com.PixelStudio Pixel Studio] app. It is based on [[#RotSprite|RotSprite]] but has better performance with slight quality loss. It can process larger images in real-time. Instead of the 8× upscale, Fast RotSprite uses a single 3× upscale. Then it simply rotates all pixels with rounding coordinates. Finally, it performs 3× downscale without introducing new colors. As all operations on each step are independent, they can be done in parallel to greatly increase performance.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Fast RotSprite is a fast rotation algorithm for pixel art developed by Oleg Mekekechko for<ins style="font-weight: bold; text-decoration: none;"> the</ins> [https://play.google.com/store/apps/details?id=com.PixelStudio Pixel Studio] app. It is based on [[#RotSprite|RotSprite]] but has better performance with slight quality loss. It can process larger images in real-time. Instead of the 8× upscale, Fast RotSprite uses a single 3× upscale. Then it simply rotates all pixels with rounding coordinates. Finally, it performs 3× downscale without introducing new colors. As all operations on each step are independent, they can be done in parallel to greatly increase performance.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Kopf–Lischinski ===</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Kopf–Lischinski ===</div></td> </tr> </table> Scg9404 https://en.wikipedia.org/w/index.php?title=Pixel-art_scaling_algorithms&diff=1231986465&oldid=prev Kamyab xd: Fix spelling, grammar, and tone 2024-07-01T09:42:30Z <p>Fix spelling, grammar, and tone</p> <a href="//en.wikipedia.org/w/index.php?title=Pixel-art_scaling_algorithms&amp;diff=1231986465&amp;oldid=1230060035">Show changes</a> Kamyab xd https://en.wikipedia.org/w/index.php?title=Pixel-art_scaling_algorithms&diff=1230060035&oldid=prev Cloudberry Jelly: Minor readability improvements in a single paragraph. 2024-06-20T11:20:19Z <p>Minor readability improvements in a single paragraph.</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 11:20, 20 June 2024</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 6:</td> <td colspan="2" class="diff-lineno">Line 6:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>As pixel art graphics are commonly used at very low [[Image resolution|resolution]]s, they employ careful coloring of individual pixels. This results in graphics that rely on a high amount of stylized visual cues to define complex shapes. A number of specialized algorithms&lt;ref&gt;{{cite web|url=http://www.datagenetics.com/blog/december32013/index.html|title=Pixel Scalers|access-date=19 February 2016|archive-date=2 March 2016|archive-url=https://web.archive.org/web/20160302044644/http://www.datagenetics.com/blog/december32013/index.html|url-status=live}}&lt;/ref&gt; have been developed to handle re-scaling of such graphics.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>As pixel art graphics are commonly used at very low [[Image resolution|resolution]]s, they employ careful coloring of individual pixels. This results in graphics that rely on a high amount of stylized visual cues to define complex shapes. A number of specialized algorithms&lt;ref&gt;{{cite web|url=http://www.datagenetics.com/blog/december32013/index.html|title=Pixel Scalers|access-date=19 February 2016|archive-date=2 March 2016|archive-url=https://web.archive.org/web/20160302044644/http://www.datagenetics.com/blog/december32013/index.html|url-status=live}}&lt;/ref&gt; have been developed to handle re-scaling of such graphics.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><del style="font-weight: bold; text-decoration: none;">While the</del> specialized algorithms <del style="font-weight: bold; text-decoration: none;">may</del> improve the appearance of pixel-art graphics, <del style="font-weight: bold; text-decoration: none;">they</del> <del style="font-weight: bold; text-decoration: none;">are</del> <del style="font-weight: bold; text-decoration: none;">also</del> <del style="font-weight: bold; text-decoration: none;">changing</del> <del style="font-weight: bold; text-decoration: none;">the</del> <del style="font-weight: bold; text-decoration: none;">appearance</del> <del style="font-weight: bold; text-decoration: none;">of the graphics</del>. Such <del style="font-weight: bold; text-decoration: none;">a</del> <del style="font-weight: bold; text-decoration: none;">consequence</del> <del style="font-weight: bold; text-decoration: none;">is</del> undesirable<del style="font-weight: bold; text-decoration: none;"> in many situations</del>, especially if the goal is to faithfully reproduce the original appearance.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;">These</ins> specialized algorithms <ins style="font-weight: bold; text-decoration: none;">can</ins> improve the appearance of pixel-art graphics, <ins style="font-weight: bold; text-decoration: none;">but</ins> <ins style="font-weight: bold; text-decoration: none;">in</ins> <ins style="font-weight: bold; text-decoration: none;">doing</ins> <ins style="font-weight: bold; text-decoration: none;">so</ins> <ins style="font-weight: bold; text-decoration: none;">they</ins> <ins style="font-weight: bold; text-decoration: none;">introduce</ins> <ins style="font-weight: bold; text-decoration: none;">changes</ins>. Such <ins style="font-weight: bold; text-decoration: none;">changes</ins> <ins style="font-weight: bold; text-decoration: none;">may</ins> <ins style="font-weight: bold; text-decoration: none;">be</ins> undesirable, especially if the goal is to faithfully reproduce the original appearance.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Since a typical application of this technology is improving the appearance of [[history of video game consoles (fourth generation)|fourth-generation]] and earlier [[video game]]s on [[video game console emulator|arcade and console emulators]], many pixel art scaling algorithms are designed to run in real time for sufficiently small input images at 60-[[frames per second]]. This places constraints on the type of [[computer programming|programming]] techniques that can be used for this sort of real-time processing.{{citation needed|date=June 2023|reason=Unclear what constraints this refers to as scaling algorithms can usually be parallelized and the source resolution would be low.}} Many work only on specific scale factors, with 2× being the most commonly used and 3×, 4×, 5×, and 6× less used.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Since a typical application of this technology is improving the appearance of [[history of video game consoles (fourth generation)|fourth-generation]] and earlier [[video game]]s on [[video game console emulator|arcade and console emulators]], many pixel art scaling algorithms are designed to run in real time for sufficiently small input images at 60-[[frames per second]]. This places constraints on the type of [[computer programming|programming]] techniques that can be used for this sort of real-time processing.{{citation needed|date=June 2023|reason=Unclear what constraints this refers to as scaling algorithms can usually be parallelized and the source resolution would be low.}} Many work only on specific scale factors, with 2× being the most commonly used and 3×, 4×, 5×, and 6× less used.</div></td> </tr> </table> Cloudberry Jelly https://en.wikipedia.org/w/index.php?title=Pixel-art_scaling_algorithms&diff=1229636037&oldid=prev WikiCleanerBot: v2.05b - Bot T18 CW#553 - Fix errors for CW project (<nowiki> tags - Title linked in text - Empty list item) 2024-06-17T22:10:19Z <p>v2.05b - <a href="/wiki/User:WikiCleanerBot#T18" title="User:WikiCleanerBot">Bot T18 CW#553</a> - Fix errors for <a href="/wiki/Wikipedia:WCW" class="mw-redirect" title="Wikipedia:WCW">CW project</a> (&lt;nowiki&gt; tags - Title linked in text - Empty list item)</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 22:10, 17 June 2024</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 2:</td> <td colspan="2" class="diff-lineno">Line 2:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>[[File:2xsai example.svg|thumb|upright=1.4|Sprite of a television set (center) resized using simple nearest-neighbor scaling (left) and the 2xSaI interpolation algorithm (right)]]</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>[[File:2xsai example.svg|thumb|upright=1.4|Sprite of a television set (center) resized using simple nearest-neighbor scaling (left) and the 2xSaI interpolation algorithm (right)]]</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>[[File:Pixel-Art_Scaling_Comparison.png|thumb|upright=1.4|Comparison of common pixel art scaling algorithms. View in full resolution to see the differences.]]</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>[[File:Pixel-Art_Scaling_Comparison.png|thumb|upright=1.4|Comparison of common pixel art scaling algorithms. View in full resolution to see the differences.]]</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>'''Pixel art scaling algorithms''' are graphical filters that attempt to enhance the appearance of hand-drawn 2D [[pixel art]] graphics. These [[algorithm]]<del style="font-weight: bold; text-decoration: none;">&lt;nowiki/&gt;</del>s are a form of automatic image enhancement. Pixel art scaling algorithms employ methods significantly different than the common methods of [[image rescaling]], which have the goal of preserving the appearance of images.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>'''Pixel art scaling algorithms''' are graphical filters that attempt to enhance the appearance of hand-drawn 2D [[pixel art]] graphics. These [[algorithm]]s are a form of automatic image enhancement. Pixel art scaling algorithms employ methods significantly different than the common methods of [[image rescaling]], which have the goal of preserving the appearance of images.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>As pixel art graphics are commonly used at very low [[Image resolution|resolution]]s, they employ careful coloring of individual pixels. This results in graphics that rely on a high amount of stylized visual cues to define complex shapes. A number of specialized algorithms&lt;ref&gt;{{cite web|url=http://www.datagenetics.com/blog/december32013/index.html|title=Pixel Scalers|access-date=19 February 2016|archive-date=2 March 2016|archive-url=https://web.archive.org/web/20160302044644/http://www.datagenetics.com/blog/december32013/index.html|url-status=live}}&lt;/ref&gt; have been developed to handle re-scaling of such graphics.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>As pixel art graphics are commonly used at very low [[Image resolution|resolution]]s, they employ careful coloring of individual pixels. This results in graphics that rely on a high amount of stylized visual cues to define complex shapes. A number of specialized algorithms&lt;ref&gt;{{cite web|url=http://www.datagenetics.com/blog/december32013/index.html|title=Pixel Scalers|access-date=19 February 2016|archive-date=2 March 2016|archive-url=https://web.archive.org/web/20160302044644/http://www.datagenetics.com/blog/december32013/index.html|url-status=live}}&lt;/ref&gt; have been developed to handle re-scaling of such graphics.</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Line 39:</td> <td colspan="2" class="diff-lineno">Line 39:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> ** </div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> ** </div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> **** </div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> **** </div></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>******</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>******</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> ****</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> ****</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> **</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> **</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Line 192:</td> <td colspan="2" class="diff-lineno">Line 191:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==== Fast RotSprite ====</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==== Fast RotSprite ====</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Fast RotSprite is a fast rotation algorithm for pixel art developed by Oleg Mekekechko for [https://play.google.com/store/apps/details?id=com.PixelStudio Pixel Studio] app. It is based on [[<del style="font-weight: bold; text-decoration: none;">Pixel-art scaling algorithms</del>#RotSprite|RotSprite]] but has better performance with slight quality loss. It is able to process larger images in realtime. Instead of the 8× upscale, Fast RotSprite uses single 3× upscale. Then it simply rotates all pixels with rounding coordinates. Finally, it performs 3× downscale without introducing new colors. As all operations on each step are independent, they can be done in parallel to greatly increase performance.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Fast RotSprite is a fast rotation algorithm for pixel art developed by Oleg Mekekechko for [https://play.google.com/store/apps/details?id=com.PixelStudio Pixel Studio] app. It is based on [[#RotSprite|RotSprite]] but has better performance with slight quality loss. It is able to process larger images in realtime. Instead of the 8× upscale, Fast RotSprite uses single 3× upscale. Then it simply rotates all pixels with rounding coordinates. Finally, it performs 3× downscale without introducing new colors. As all operations on each step are independent, they can be done in parallel to greatly increase performance.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Kopf–Lischinski ===</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Kopf–Lischinski ===</div></td> </tr> <!-- diff cache key enwiki:diff:1.41:old-1224313456:rev-1229636037:wikidiff2=table:1.14.1:ff290eae --> </table> WikiCleanerBot https://en.wikipedia.org/w/index.php?title=Pixel-art_scaling_algorithms&diff=1224313456&oldid=prev Artoria2e5: /* 2×SaI */ comment on complex mask thing 2024-05-17T16:28:05Z <p><span class="autocomment">2×SaI: </span> comment on complex mask thing</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 16:28, 17 May 2024</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 129:</td> <td colspan="2" class="diff-lineno">Line 129:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;pre&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;pre&gt;</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>INTERPOLATE(uint32 A, UINT32 B)</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>INTERPOLATE(uint32 A, UINT32 B)<ins style="font-weight: bold; text-decoration: none;">.</ins></div></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>-- linear midpoint of A and B</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> if (A == B) return A;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> if (A == B) return A;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> return (</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> return (</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Line 137:</td> <td colspan="2" class="diff-lineno">Line 138:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Q_INTERPOLATE(uint32 A, uint32 B, uint32 C, uint32 D)</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Q_INTERPOLATE(uint32 A, uint32 B, uint32 C, uint32 D)</div></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>-- bilinear interpolation; A, B, C, D's average</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> x = ((A &amp; qColorMask) &gt;&gt; 2)</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> x = ((A &amp; qColorMask) &gt;&gt; 2)</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> + ((B &amp; qColorMask) &gt;&gt; 2)</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> + ((B &amp; qColorMask) &gt;&gt; 2)</div></td> </tr> </table> Artoria2e5