Even,

Thanks for you reply.

I wrote this piece of code to demonstrate what is happening:

{{{
public static void main(String[] args) {

        Dataset dataset = null;
        Driver driver = null;
        Band band = null;
        
        int xsize = 4;
        int ysize = 4;

        gdal.AllRegister();
        
        driver = gdal.GetDriverByName("GTIFF");
        dataset = driver.Create("D:\\temp\\checkit.tif", xsize, ysize, 1, 
gdalconstConstants.GDT_Float32);
        band = dataset.GetRasterBand(1);
        
        ByteBuffer byteBuffer = ByteBuffer.allocateDirect(4 * xsize);
        FloatBuffer floatBuffer = byteBuffer.asFloatBuffer();
        
        for( int i = 0; i < ysize; i++) {
                for( int j = 0; j < xsize; j++) {
                        floatBuffer.put(j, (float) (i + j));            
                }
                band.WriteRaster_Direct(0, i, xsize, 1, 
gdalconstConstants.GDT_Float32, byteBuffer);
        }
        
        band.FlushCache();
        dataset.FlushCache();
        dataset.delete();

        System.out.println("Done!");
}
}}}

And that is the output image dumped in Python:

array([[  0.00000000e+00,   4.60060299e-41,   8.96831017e-44,  2.30485571e-41],
       [  4.60060299e-41,   8.96831017e-44,   2.30485571e-41,  4.60074312e-41],
       [  8.96831017e-44,   2.30485571e-41,   4.60074312e-41,  5.74868682e-41],
       [  2.30485571e-41,   4.60074312e-41,   5.74868682e-41,  
6.89663052e-41]], dtype=float32))

If I change the code to produce Byte output:

{{{
public static void main(String[] args) {

        Dataset dataset = null;
        Driver driver = null;
        Band band = null;
        
        int xsize = 4;
        int ysize = 4;

        gdal.AllRegister();
        
        driver = gdal.GetDriverByName("GTIFF");
        dataset = driver.Create("D:\\temp\\checkit2.tif", xsize, ysize, 1, 
gdalconstConstants.GDT_Byte);
        band = dataset.GetRasterBand(1);
        
        ByteBuffer byteBuffer = ByteBuffer.allocateDirect(xsize);
        
        for( int i = 0; i < ysize; i++) {
                for( int j = 0; j < xsize; j++) {
                        byteBuffer.put(j, (byte) (i + j));              
                }
                band.WriteRaster_Direct(0, i, xsize, 1, 
gdalconstConstants.GDT_Byte, byteBuffer);
        }
        
        band.FlushCache();
        dataset.FlushCache();
        dataset.delete();

        System.out.println("Done!");
}
}}}

That is what I got:

array([[0, 1, 2, 3],
       [1, 2, 3, 4],
       [2, 3, 4, 5],
       [3, 4, 5, 6]], dtype=uint8)

That is correct but I need Float32 output on my real application.

Can you see if I am missing something? 

When [1] says "It automatically takes care of data type translation if the data 
type" it means exactly like the others GDAL APIs?

My best regards,

Ivan

[1] 
http://gdal.org/java/org/gdal/gdal/Band.html#WriteRaster_Direct%28int,%20int,%20int,%20int,%20int,%20int,%20int,%20java.nio.ByteBuffer,%20int,%20int%29


>  -------Original Message-------
>  From: Even Rouault <[email protected]>
>  Subject: Re: [gdal-dev] GDAL-Java: How to write Flot32, Int16?
>  Sent: Nov 03 '09 17:18
>  
>  Selon Ivan <[email protected]>:
>  
>  The Java API only uses ByteBuffer. But you can use the asDoubleBuffer(),
>  asFloatBuffer(), asIntBuffer() or asShortBuffer() methods to create views of 
> the
>  byte buffer as double, float, int or short buffer.
>  
>  For example :
>  
>  ByteBuffer byteBuffer = ByteBuffer.allocateDirect(8 * buf_xsize * buf_ysize);
>  band.ReadRaster_Direct(0, 0, xsize, ysize, buf_xsize, buf_ysize,
>  gdal.GDT_Float64, byteBuffer);
>  DoubleBuffer doubleBuffer = byteBuffer.asDoubleBuffer();
>  
>  > Hi,
>  >
>  > Does anybody know how to write a FloatBuffer, IntBuffer or ShotBuffer using
>  > the Java API?
>  >
>  > Thanks,
>  >
>  > Ivan
>  > _______________________________________________
>  > gdal-dev mailing list
>  > [email protected]
>  > http://lists.osgeo.org/mailman/listinfo/gdal-dev
>  >
>  
>  
>  
_______________________________________________
gdal-dev mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/gdal-dev

Reply via email to