using System; using GDAL; /** *

Title: GDAL C# GDALColorTable example.

*

Description: A sample app for demonstrating the usage of the ColorTable object.

* @author Tamas Szekeres (szekerest@gmail.com) * @version 1.0 */ /// /// A C# based sample for demonstrating the usage of the ColorTable object. /// class GDALColorTable { public static void usage() { Console.WriteLine("usage: gdalcolortable {source dataset} {destination file}"); System.Environment.Exit(-1); } public static void Main(string[] args) { if (args.Length != 2) usage(); string file = args[0]; string file_out = args[1]; try { /* -------------------------------------------------------------------- */ /* Register driver(s). */ /* -------------------------------------------------------------------- */ gdal.AllRegister(); Driver dv = null; Dataset ds = null, ds_out = null; Band ba = null, ba_out = null; ColorTable ct = null, ct_out = null; byte [] buffer; /* -------------------------------------------------------------------- */ /* Open dataset. */ /* -------------------------------------------------------------------- */ ds = gdal.Open(file, gdalconst.GA_ReadOnly); ba = ds.GetRasterBand(1); ct = ba.GetRasterColorTable(); if( ct != null ) Console.WriteLine( "Band has a color table with " + ct.GetCount() + " entries."); buffer = new byte [ds.RasterXSize * ds.RasterYSize]; ba.ReadRaster(0, 0, ds.RasterXSize, ds.RasterYSize, buffer, ds.RasterXSize, ds.RasterYSize, 0, 0); /* -------------------------------------------------------------------- */ /* Get driver */ /* -------------------------------------------------------------------- */ dv = gdal.GetDriverByName("GTiff"); ds_out = dv.Create(file_out, ds.RasterXSize, ds.RasterYSize, ds.RasterCount, ba.DataType, new string [] {}); ba_out = ds_out.GetRasterBand(1); ct_out = new ColorTable(gdalconst.GPI_RGB); ba_out.WriteRaster(0, 0, ds.RasterXSize, ds.RasterYSize, buffer, ds.RasterXSize, ds.RasterYSize, 0, 0); /* -------------------------------------------------------------------- */ /* Copying the colortable */ /* -------------------------------------------------------------------- */ for (int i = 0; i < ct.GetCount(); i++) { ColorEntry ce = null, ce_out = null; ce = ct.GetColorEntry(i); ce_out = new ColorEntry(); ce_out.c1 = ce.c1; ce_out.c2 = ce.c2; ce_out.c3 = ce.c3; ce_out.c4 = ce.c4; ct_out.SetColorEntry(i, ce_out); ce.Dispose(); ce_out.Dispose(); } ba_out.SetRasterColorTable(ct_out); } catch (Exception e) { Console.WriteLine("Application error: " + e.Message); } } }