[Gdal-dev] Creating an empty ColorTable in C++

Roger Bivand Roger.Bivand at nhh.no
Tue Aug 29 15:07:20 EDT 2006


On Tue, 29 Aug 2006, Frank Warmerdam wrote:

> Roger Bivand wrote:
> > I'm trying to replicate some of the inner logic of rgb2cpt.py in a C++ 
> > function from R. I'm stuck on how to declare/initialize a GDALColorTable 
> > *ct for GDALComputeMedianCutPCT() and GDALDitherRGB2PCT() - I'm using:
> > 
> >   GDALColorTable *ct = pRasterBand->GetColorTable();
> > 
> > where pRasterBand is the red band of the input data set. This obviously 
> > upsets GDALComputeMedianCutPCT() which seems to want a naked ColorTable, 
> > and seg.faults:
> > 
> > #0  0xb798bf3a in GDALColorTable::SetColorEntry ()
> >    from /usr/local/lib/libgdal.so.1
> > #1  0xb798bfe5 in GDALSetColorEntry () from /usr/local/lib/libgdal.so.1
> > #2  0xb79b742e in GDALComputeMedianCutPCT () from /usr/local/lib/libgdal.so.1
> 
> Roger,
> 
> GDALComputeMedianCutPCT() wants a GDALColorTableH.  You can create a new
> clear color table for it using GDALCreateColorTable(GPI_RGB).

Frank,

Thanks, that helped a little.

My plan was to pass from R to GDAL the handles to two data sets, the 
output one of which would get populated by the color index band and the 
color table. I now see a clean error exit:

Error in rgdal:::SGDF2RGB(xx) : 
        GDAL Error 6: SetColorTable() not supported for existing TIFF files.

which suggests that I should rather initiate the output dataset in my 
C/C++ code.

> 
> I suspect that the GetColorTable() is returning NULL which is causing the
> crash later on.
> 
> Also, I notice you were using the C++ method to fetch the color table.
> It is up to you, but if you were to use only the C API in an R interface
> to GDAL it would make things much less "version fragile".  That is, new
> versions of GDAL could be substituted without necessarily having to
> recompile the R wrappers as the C API is much more ABI stable than the
> C++ API.
> 

I'm very much building on and maintaining Tim Keitt's elegant C++ code, 
which is written C++ style; as is evident C++ is not a language I enjoy, 
but I would not want to have to rewrite Tim's earlier work. So the code 
has stayed a mixture of elegance where I haven't done anything and 
muddling through where I have written things.

The idea of having a rapid RGB display mechanism for three-band objects 
was Tim's, but I thought I'd have a look. I may end up just writing a file 
for rgb2pct.py to convert from the R level.

Best wishes,

Roger

> Best regards,
> 

-- 
Roger Bivand
Economic Geography Section, Department of Economics, Norwegian School of
Economics and Business Administration, Helleveien 30, N-5045 Bergen,
Norway. voice: +47 55 95 93 55; fax +47 55 95 95 43
e-mail: Roger.Bivand at nhh.no




More information about the Gdal-dev mailing list