<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.2800.1400" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV>&gt; The underlying Warp API does contain mechanisms whereby an 
application<BR>&gt; might be able to maintain an alpha band properly, but the 
gdalwarp<BR>&gt; program has no mechanism to take advantage of it.&nbsp; 
Furthermore, this<BR>&gt; hasn't really be used in the warp api so there may be 
issues I didn't<BR>&gt; anticipate.<BR>&gt; <BR>&gt; Currently, the gdalwarp 
assumption is that nodata pixel values will be<BR>&gt; used to mark unset 
areas.&nbsp; So that might involve picking a "background"<BR>&gt; value, like 0, 
to mark all unset areas.&nbsp; INIT_DEST could be used to<BR>&gt; pre-apply this 
to the output file if a non-zero value were used.&nbsp; Then<BR>&gt; the warper 
would replace all pixels for which a value exists.&nbsp;&nbsp; No 
mechanism<BR>&gt; exists to ensure that the nodata value doesn't existing in the 
valid image<BR>&gt; data though.<BR>&gt; <BR>&gt; I think it would make sense to 
modify gdalwarp to explicitly support<BR>&gt; transparency layers.&nbsp; Some 
common forms I could imagine are:<BR>&gt; <BR>&gt;&nbsp;&nbsp; o An extra output 
band used to hold transparency.&nbsp; Normally this 
would<BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp; be assigned 0 to unset pixels and 255 for 
set pixels.</DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>This feature would be extremely useful for my 
situation as well.&nbsp; I do not necessarily need the first more difficult 
option (the ability to create an additional&nbsp;transparent band) as I would 
only need the ability to filter out the aformentioned "nodata" value in the 
image.&nbsp; Both methods would work&nbsp;for my situation though.&nbsp; I could 
write the necessary code if need be.&nbsp; I was thinking the most consistant to 
your way of doing things was to add another&nbsp;option in papszWarpOptions 
called REPLACE = TRUE or FALSE.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>Then after the rasterdata is fetched in <FONT 
size=2>WarpRegionToBuffer() </FONT>from the source file I would loop through the 
source data doing the following:</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV><FONT color=#0000ff size=3>
<DIV><FONT face=Arial color=#000000 size=2>for</FONT></FONT><FONT size=2><FONT 
face=Arial>(i = 0</FONT><FONT face=Arial>; i &lt; (nWordSize * nSrcXSize * 
nSrcYSize); i++)</FONT></FONT><FONT size=3></DIV>
<DIV><FONT face=Arial size=2>{</FONT></DIV>
<DIV></FONT><FONT size=2><FONT face=Arial></FONT></FONT>&nbsp;</DIV>
<DIV><FONT size=2><FONT face=Arial>&nbsp;&nbsp;&nbsp; BOOL noData = 
FALSE</FONT><FONT face=Arial>;</FONT></FONT><FONT size=3></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV></FONT><FONT size=2><FONT face=Arial>&nbsp;&nbsp;&nbsp; for (int j = 
0</FONT><FONT face=Arial>; j&lt;psOptions-&gt;nBandCount; 
j++)</FONT></FONT><FONT size=3></DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; {</FONT></DIV>
<DIV></FONT><FONT size=2><FONT face=Arial>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  
if(oWK.papabySrcImage[0</FONT><FONT face=Arial>][i + j * (nSrcXSize * 
nSrcYSize)] == initDest[j])</FONT></FONT><FONT size=3></DIV>
<DIV></FONT><FONT size=2><FONT face=Arial>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  
&nbsp;&nbsp;&nbsp; noData = </FONT><FONT face=Arial>TRUE</FONT><FONT 
face=Arial>;</FONT></FONT><FONT size=3></DIV>
<DIV></FONT><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 
else</FONT><FONT size=3> </DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 
{</FONT></DIV>
<DIV></FONT><FONT size=2><FONT face=Arial>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; noData = </FONT><FONT face=Arial>FALSE</FONT><FONT 
face=Arial>;</FONT></FONT><FONT size=3></DIV>
<DIV></FONT><FONT size=2><FONT face=Arial>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; 
&nbsp;&nbsp;&nbsp; break</FONT><FONT face=Arial>;</FONT></FONT><FONT 
size=3></DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 
}</FONT></DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; }</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV></FONT><FONT size=2><FONT face=Arial>&nbsp;&nbsp;&nbsp; if</FONT><FONT 
face=Arial>(noData)</FONT></FONT><FONT size=3></DIV>
<DIV></FONT><FONT size=2><FONT face=Arial>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
for (int j = 0</FONT><FONT face=Arial>; j&lt;psOptions-&gt;nBandCount; 
j++)</FONT></FONT><FONT size=3></DIV>
<DIV></FONT><FONT size=2><FONT face=Arial>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; oWK.papabySrcImage[</FONT><FONT face=Arial>0</FONT><FONT 
face=Arial>][i + j * (nSrcXSize * nSrcYSize)]++;</FONT></FONT><FONT 
size=3></DIV>
<DIV><FONT face=Arial size=2>}</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>If this method seems utterly inefficient let me 
know.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>Thanks,<BR>Jason R. Hughes<BR>Elantech, Inc. 
<BR>6411 Ivy Lane, Suite 300<BR>Greenbelt, MD 20770<BR>Phone: 301-486-0600<BR><A 
href="mailto:jason.hughes@elantech-inc.com">jason.hughes@elantech-inc.com</A></FONT></DIV></FONT></BODY></HTML>