public SetColorEntry ( int entry, OSGeo.GDAL.ColorEntry centry ) : void | ||
entry | int | |
centry | OSGeo.GDAL.ColorEntry | |
return | void |
/// <summary> /// This should update the palette cached and in the file. /// </summary> /// <param name="value"></param> public override void SetColorPalette(IEnumerable<Color> value) { ColorPalette = value; _dataset = Gdal.Open(Filename, Access.GA_Update); ColorTable ct = new ColorTable(PaletteInterp.GPI_RGB); int index = 0; foreach (Color c in value) { ColorEntry ce = new ColorEntry(); ce.c4 = c.A; ce.c3 = c.B; ce.c2 = c.G; ce.c1 = c.R; ct.SetColorEntry(index, ce); index++; } using (Band first = _dataset.GetRasterBand(1)) { first.SetRasterColorTable(ct); } }
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, Access.GA_ReadOnly); ba = ds.GetRasterBand(1); ct = ba.GetRasterColorTable(); if( ct != null ) Console.WriteLine( "Band has a color table with " + ct.GetCount() + " entries."); else { Console.WriteLine( "Data source has no color table"); return; } 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(PaletteInterp.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); } }