[gdal-dev] Issues with Java Bindings in 1.5 ...

abhay menon abhay.menon at gmail.com
Fri Jan 18 13:37:23 EST 2008


Hi,

 The GDAL Java Bind for GDAL 1.5 got compiled but the GDALTest.Java failed
to compile.

at line 295

cm = poBand.GetRasterColorTable().getIndexColorModel(
                                gdal.GetDataTypeSize(buf_type));

Is the getIndexColorModel method been deprecated is there any other method
that is return ColorModel which is available in GetRasterColorTable ??

Rgds

Abhay

On Jan 15, 2008 2:40 AM, Tamas Szekeres <szekerest at gmail.com> wrote:

> Rick,
>
> You can get further information about the history of the related
> changes from this ticket:
> http://trac.osgeo.org/gdal/ticket/1578
>
> According to the changeset http://trac.osgeo.org/gdal/changeset/11640
> The ColoryEntry is treated as objects for all of the binding instead
> of arrays. Therefore the typemaps for GDALColorEntry in java has
> become outdated.
> It seems to me that these typemaps in the java bindings are tending to
> map GDALColorEntry directly to java/awt/Color which is a target
> language specific type.
>
> I can consider the following 2 trivial options to fix this problem:
>
> 1, Revert the change for java
>
> Index: gdal.i
> ===================================================================
> --- gdal.i      (revision 13527)
> +++ gdal.i      (working copy)
> @@ -258,7 +258,7 @@
>  // GDALColorEntry
>  //
>
>  //************************************************************************
> -#ifndef SWIGPERL
> +#if !definied(SWIGPERL) and !defined(SWIGJAVA)
>  %rename (ColorEntry) GDALColorEntry;
>  typedef struct
>  {
>
>
> 2. Strip the GDALColorEntry typemaps and thread ColorEntry as a separate
> class.
>
> Index: typemaps_java.i
> ===================================================================
> --- typemaps_java.i     (revision 13527)
> +++ typemaps_java.i     (working copy)
> @@ -65,46 +65,9 @@
>
>
>
> -%typemap(in) (GDALColorEntry *) (GDALColorEntry tmp) {
> -  /* %typemap(in) (GDALColorEntry *) (GDALColorEntry tmp) */
> -  $1 = NULL;
> -  float *colorptr = 0;
> -  const jclass Color = jenv->FindClass("java/awt/Color");
> -  const jmethodID colors = jenv->GetMethodID(Color, "getRGBComponents",
> -    "([F)[F");
>
> -  jfloatArray colorArr = jenv->NewFloatArray(4);
> -  colorArr = (jfloatArray)jenv->CallObjectMethod($input, colors,
> colorArr);
>
> -  colorptr = (float *)jenv->GetFloatArrayElements(colorArr, 0);
> -  tmp.c1 = (short)(colorptr[0] * 255);
> -  tmp.c2 = (short)(colorptr[1] * 255);
> -  tmp.c3 = (short)(colorptr[2] * 255);
> -  tmp.c4 = (short)(colorptr[3] * 255);
> -  /*printf( "  %d, %d, %d, %d\n",
> -                    tmp.c1, tmp.c2, tmp.c3, tmp.c4 );*/
> -  $1 = &tmp;
> -}
>
> -%typemap(out) (GDALColorEntry *) {
> -  /* %typemap(out) (GDALColorEntry *) */
> -  const jclass Color = jenv->FindClass("java/awt/Color");
> -  const jmethodID ccon = jenv->GetMethodID(Color, "<init>",
> -    "(IIII)V");
> -  $result = jenv->NewObject(Color, ccon, $1->c1, $1->c2, $1->c3, $1->c4);
> -}
> -
> -%typemap(jni) (GDALColorEntry *) "jobject"
> -%typemap(jtype) (GDALColorEntry *) "java.awt.Color"
> -%typemap(jstype) (GDALColorEntry *) "java.awt.Color"
> -%typemap(javain) (GDALColorEntry *) "$javainput"
> -%typemap(javaout) (GDALColorEntry *) {
> -    return $jnicall;
> -  }
> -
> -
> -
> -
>  /*
>  * Typemap argout of GDAL_GCP* used in Dataset::GetGCPs( )
>  */
>
> I would suggest to apply #2 in the development version since it
> reduces the divergence between the java and the other languages,
> however it breaks the backward compatibility.
>
> Best regards,
>
> Tamas
>
>
>
>
> 2008/1/14, Rick Brownrigg <brownrigg at sunflower.com>:
> > I have spent some time investigating the build issues for the Java
> > bindings in 1.5, and for the most part there are a couple of nearly
> > trivial fixes to the Makefile and the environment settings that are
> > required. However, the most troublesome issue seems to be a swig
> > type-mapping issue, which at present I do not know how to correct. It
> > centers upon the gdal type ColorEntry, which is mapped in
> > ...../swig/include/gdal.i    For reasons I don't understand, the
> > generated file ..../swig/java/org/gdal/gdal/ColorEntry.java tries to
> > pass arguments of type long (a pointer presumably) to the various native
> > settors/gettors implemented in gdalJNI.java (also a generated file),
> > which is expecting java.awt.Color objects instead. Hence the code will
> > not compile.  I don't understand the source of the mismatch,
> > particularly as these two files are generated by swig.
> >
> > Note that this mismatch was present in 1.4.x, but was masked by a #ifdef
> > SWIGCSHARP directive around the mapping in gdal.i.  (and thus there was
> > no Java proxy for the gdal type ColorEntry in 1.4.x (?)).
> >
> > I had indicated I would volunteer to support the Java bindings, but with
> > this experience, I am now not confident  that I can do so in a timely
> > fashion.
> >
> > FWIW...
> > Rick Brownrigg
> >
> > _______________________________________________
> > gdal-dev mailing list
> > gdal-dev at lists.osgeo.org
> > http://lists.osgeo.org/mailman/listinfo/gdal-dev
> >
> _______________________________________________
> gdal-dev mailing list
> gdal-dev at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/gdal-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/gdal-dev/attachments/20080119/3e7e7b15/attachment-0001.html


More information about the gdal-dev mailing list