SEXP RGDAL_GenCMap(SEXP input1, SEXP input2, SEXP input3, SEXP output, SEXP nColors, SEXP setCMap) { GDALRasterBand* band1 = getGDALRasterPtr(input1); GDALRasterBand* band2 = getGDALRasterPtr(input2); GDALRasterBand* band3 = getGDALRasterPtr(input3); GDALColorTable ctab; int ncol = asInteger(nColors); if (ncol < 2 || ncol > 256) error("Number of colors should range from 2 to 256"); installErrorHandler(); int err = GDALComputeMedianCutPCT(band1, band2, band3, NULL, ncol, &ctab, NULL, NULL); if (err == CE_Failure) { uninstallErrorHandlerAndTriggerError(); error("Error generating color table"); } uninstallErrorHandlerAndTriggerError(); if (output != R_NilValue) { GDALRasterBand* target = getGDALRasterPtr(output); installErrorHandler(); err = GDALDitherRGB2PCT(band1, band2, band3, target, &ctab, NULL, NULL); if (err == CE_Failure) { uninstallErrorHandlerAndTriggerError(); error("Image dithering failed"); } uninstallErrorHandlerAndTriggerError(); if (asLogical(setCMap)) { installErrorHandler(); err = GDALSetRasterColorTable(target, &ctab); if (err == CE_Failure) { uninstallErrorHandlerAndTriggerError(); warning("Unable to set color table"); } uninstallErrorHandlerAndTriggerError(); } } return(GDALColorTable2Matrix(&ctab)); }
SEXP RGDAL_GetColorTable(SEXP rasterObj) { GDALRasterBandH rasterBand = getGDALRasterPtr(rasterObj); GDALColorTableH ctab = GDALGetRasterColorTable(rasterBand); if (ctab == NULL) return(R_NilValue); return(GDALColorTable2Matrix(ctab)); }
SEXP RGDAL_GetColorTable(SEXP rasterObj) { GDALRasterBandH rasterBand = getGDALRasterPtr(rasterObj); installErrorHandler(); GDALColorTableH ctab = GDALGetRasterColorTable(rasterBand); uninstallErrorHandlerAndTriggerError(); if (ctab == NULL) return(R_NilValue); return(GDALColorTable2Matrix(ctab)); }