Thanks, GDALCopyWords was what I was looking for<br><br>Thanks<br><br>Chris<br><br><div class="gmail_quote">On Fri, Jun 3, 2011 at 12:39 PM, Even Rouault <span dir="ltr">&lt;<a href="mailto:even.rouault@mines-paris.org">even.rouault@mines-paris.org</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">Le vendredi 03 juin 2011 12:32:16, Goo Creations a écrit :<br>
<div class="im">&gt; Ah, thanks. This solved the problem.<br>
&gt; I however face the problem that I don&#39;t know which data type the image has.<br>
&gt; So I can&#39;t hardcode the array to unsigned short, since it might sometimes<br>
&gt; be a int32 or even a float. So is there a way to do this in a generic way?<br>
<br>
</div>I&#39;m not sure what you are trying to do exactly. There are various<br>
possibilities. Use good all switch() case() to care for different data types,<br>
which can be combined with using C++ templates to write generic code to reduce<br>
the amount of copying&amp;pasting, use GDALCopyWords() to convert an array from<br>
one type to another one...<br>
<div><div></div><div class="h5"><br>
&gt;<br>
&gt; Chris<br>
&gt;<br>
&gt; On Fri, Jun 3, 2011 at 12:21 PM, Even Rouault<br>
&gt;<br>
&gt; &lt;<a href="mailto:even.rouault@mines-paris.org">even.rouault@mines-paris.org</a>&gt;wrote:<br>
&gt; &gt; Le vendredi 03 juin 2011 12:13:41, Goo Creations a écrit :<br>
&gt; &gt; &gt; Hi all<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; I have a strange problem when writing to a GDAL dataset. I&#39;m currently<br>
&gt; &gt; &gt; doing the following:<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; *GDALDataset *mInputDataset = (GDALDataset*) GDALOpen(&quot;in.tif&quot;,<br>
&gt; &gt; &gt; GA_ReadOnly);<br>
&gt; &gt; &gt; GDALDataType type =<br>
&gt; &gt; &gt; mInputDataset-&gt;GetRasterBand(1)-&gt;GetRasterDataType(); int mWidth =<br>
&gt; &gt; &gt; mInputDataset-&gt;GetRasterXSize();<br>
&gt; &gt; &gt; int mHeight = mInputDataset-&gt;GetRasterYSize();<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; GDALDataset *mOutputDataset =<br>
&gt; &gt;<br>
&gt; &gt; mInputDataset-&gt;GetDriver()-&gt;Create(&quot;out.tif&quot;,<br>
&gt; &gt;<br>
&gt; &gt; &gt; mWidth, mHeight, mBands, type, 0);<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; int *data = &lt;&lt;get data for entire band&gt;&gt;<br>
&gt; &gt; &gt; mOutputDataset-&gt;GetRasterBand(1)-&gt;RasterIO(GF_Write, 0, 0,<br>
&gt; &gt;<br>
&gt; &gt; aligner.width(),<br>
&gt; &gt;<br>
&gt; &gt; &gt; aligner.height(), data, aligner.width(), aligner.height(), type, 0, 0);<br>
&gt; &gt; &gt; mOutputDataset-&gt;FlushCache();<br>
&gt; &gt; &gt; *<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; The input image provided has a datatype of UINT16. When I hardcode all<br>
&gt; &gt; &gt; &quot;type&quot; variables in the above example to GDT_Int32, then the image is<br>
&gt; &gt; &gt; correctly created, but when I leave the example as is (hence with<br>
&gt; &gt; &gt; GDT_UInt16 assigned to &quot;type&quot;), then I get a strange problem that every<br>
&gt; &gt; &gt; second column has a value of 0. So every odd column has the correct<br>
&gt; &gt;<br>
&gt; &gt; values<br>
&gt; &gt;<br>
&gt; &gt; &gt; in, but every even column has values of 0. I&#39;ve checked the data array,<br>
&gt; &gt; &gt; and all the values in there are correct.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; Does anyone know why this is happening?<br>
&gt; &gt;<br>
&gt; &gt; Yes, the type parameter must be consistent with the C type of the data<br>
&gt; &gt; array,<br>
&gt; &gt; otherwise weird things can happen, including crashes.<br>
&gt; &gt;<br>
&gt; &gt; In your exemple data is of type int*, so type must be set to GDT_Int32.<br>
&gt; &gt; If you want to write GDT_UInt16, then data must be declared as being of<br>
&gt; &gt; type<br>
&gt; &gt; unsigned short*<br>
</div></div></blockquote></div><br>