<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
code
        {mso-style-priority:99;
        font-family:"Courier New";}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML-esimuotoiltu Char";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";}
span.HTML-esimuotoiltuChar
        {mso-style-name:"HTML-esimuotoiltu Char";
        mso-style-priority:99;
        mso-style-link:HTML-esimuotoiltu;
        font-family:Consolas;
        mso-fareast-language:FI;}
span.gmail-line
        {mso-style-name:gmail-line;}
span.Shkpostityyli22
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 2.0cm 70.85pt 2.0cm;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="FI" link="blue" vlink="purple" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal"><span style="mso-fareast-language:EN-US">Hi,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US">Have you tried the LUT processing option
<a href="https://mapserver.org/input/raster.html">https://mapserver.org/input/raster.html</a>?<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US">-Jukka Rahkonen-<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b>Lähettäjä:</b> MapServer-users <mapserver-users-bounces@lists.osgeo.org>
<b>Puolesta </b>Mallinger, Bernhard<br>
<b>Lähetetty:</b> maanantai 28. marraskuuta 2022 15.35<br>
<b>Vastaanottaja:</b> mapserver-users@lists.osgeo.org<br>
<b>Aihe:</b> [MapServer-users] Distinguish between pixels outside of SCALE range and nodata pixels<o:p></o:p></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt">Hello,<o:p></o:p></p>
</div>
<p class="MsoNormal">We have maps where we want the color scale go from e.g. 10 to 20, so we are using this directive:<o:p></o:p></p>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><br>
<span style="font-family:"Courier New"">PROCESSING "SCALE_1=10.0,20.0" </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt">This works great by itself, however it also means that pixels with values of e.g. 5 are rendered as transparent, which is the same as the nodata pixels. So in the final image, you can't tell if data is present
 but the values are too low, or if there just isn't any data.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt">So the behaviour we would like is that values below 10 are rendered as black and values over 20 are rendered as white.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">Is this somehow possible with mapscript?<br>
<br>
<br>
We tried to have a look in the source code, and there is this line, which effectively assigns 0 to pixels below the minimum:<br>
<a href="https://eur06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2FMapServer%2FMapServer%2Fblob%2Fmain%2Fmapdrawgdal.c%23L1555&data=05%7C01%7Cjukka.rahkonen%40maanmittauslaitos.fi%7Cc759129ba15f4a44e03d08dad1456ef8%7Cc4f8a63255804a1c92371d5a571b71fa%7C0%7C0%7C638052393387117846%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=t6zAXKjbvlaZx5FiDt3lPMGBui7IshCIXHLiBdxXSBk%3D&reserved=0">https://github.com/MapServer/MapServer/blob/main/mapdrawgdal.c#L1555</a><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">It turns out that this small code change actually produces the desired behavior:<o:p></o:p></p>
</div>
<div>
<pre id="gmail-code-7"><span class="gmail-line">       fScaledValue = (float) ((pafRawData[i]-dfScaleMin)*dfScaleRatio);</span><code><o:p></o:p></code></pre>
<pre><span class="gmail-line"> </span><code><o:p></o:p></code></pre>
<pre><span class="gmail-line">       if( fScaledValue < 0.0 )</span><code><o:p></o:p></code></pre>
<pre><span class="gmail-line">-        pabyBuffer[i] = 0;</span><code><o:p></o:p></code></pre>
<pre><span class="gmail-line">+        if (pafRawData[i] > 0) {</span><code><o:p></o:p></code></pre>
<pre><span class="gmail-line">+            pabyBuffer[i] = 1;</span><code><o:p></o:p></code></pre>
<pre><span class="gmail-line">+        } else {</span><code><o:p></o:p></code></pre>
<pre><span class="gmail-line">+            pabyBuffer[i] = 0;</span><code><o:p></o:p></code></pre>
<pre style="margin-bottom:12.0pt"><span class="gmail-line">+        }</span><o:p></o:p></pre>
<pre style="margin-bottom:12.0pt" id="gmail-code-7"><span class="gmail-line"><span style="font-family:"Arial",sans-serif">(I.e. if the original value was greater than 0, then assign 1 to this pixel such that it will be black and not transparent.)</span></span><o:p></o:p></pre>
<pre style="margin-bottom:12.0pt" id="gmail-code-7"><span class="gmail-line"><span style="font-family:"Arial",sans-serif">If this behavior can't yet be configured via mapscript, we could work on a pull request to implement this behavior, which would then be activated via a new configuration option.</span></span><span style="font-family:"Arial",sans-serif"><br><span class="gmail-line">Do you have any thoughts on this? Does this make sense to you as a feature?</span></span><o:p></o:p></pre>
<pre id="gmail-code-7"><span class="gmail-line"><span style="font-family:"Arial",sans-serif">Best regards,</span></span><span style="font-family:"Arial",sans-serif"><br><span class="gmail-line">Bernhard</span></span><o:p></o:p></pre>
</div>
</div>
</div>
</body>
</html>