using System;
using OSGeo.GDAL;
/**
*
Title: GDAL C# GDALOverviews example.
* Description: A sample app to create GDAL raster overviews.
* @author Tamas Szekeres (szekerest@gmail.com)
* @version 1.0
*/
///
/// A C# based sample to create GDAL raster overviews.
///
class GDALOverviews {
public static void usage()
{
Console.WriteLine("usage: gdaloverviews {GDAL dataset name} {resamplealg} {level1} {level2} ....");
Console.WriteLine("example: gdaloverviews sample.tif \"NEAREST\" 2 4");
System.Environment.Exit(-1);
}
public static void Main(string[] args)
{
if (args.Length <= 2) usage();
Console.WriteLine("");
try
{
/* -------------------------------------------------------------------- */
/* Register driver(s). */
/* -------------------------------------------------------------------- */
Gdal.AllRegister();
/* -------------------------------------------------------------------- */
/* Open dataset. */
/* -------------------------------------------------------------------- */
Dataset ds = Gdal.Open( args[0], Access.GA_Update );
if (ds == null)
{
Console.WriteLine("Can't open " + args[0]);
System.Environment.Exit(-1);
}
Console.WriteLine("Raster dataset parameters:");
Console.WriteLine(" Projection: " + ds.GetProjectionRef());
Console.WriteLine(" RasterCount: " + ds.RasterCount);
Console.WriteLine(" RasterSize (" + ds.RasterXSize + "," + ds.RasterYSize + ")");
int[] levels = new int[args.Length -2];
Console.WriteLine(levels.Length);
for (int i = 2; i < args.Length; i++)
{
levels[i-2] = int.Parse(args[i]);
}
if (ds.BuildOverviews(args[1], levels, new Gdal.GDALProgressFuncDelegate(ProgressFunc), "Sample Data") != (int)CPLErr.CE_None)
{
Console.WriteLine("The BuildOverviews operation doesn't work");
System.Environment.Exit(-1);
}
/* -------------------------------------------------------------------- */
/* Displaying the raster parameters */
/* -------------------------------------------------------------------- */
for (int iBand = 1; iBand <= ds.RasterCount; iBand++)
{
Band band = ds.GetRasterBand(iBand);
Console.WriteLine("Band " + iBand + " :");
Console.WriteLine(" DataType: " + band.DataType);
Console.WriteLine(" Size (" + band.XSize + "," + band.YSize + ")");
Console.WriteLine(" PaletteInterp: " + band.GetRasterColorInterpretation().ToString());
for (int iOver = 0; iOver < band.GetOverviewCount(); iOver++)
{
Band over = band.GetOverview(iOver);
Console.WriteLine(" OverView " + iOver + " :");
Console.WriteLine(" DataType: " + over.DataType);
Console.WriteLine(" Size (" + over.XSize + "," + over.YSize + ")");
Console.WriteLine(" PaletteInterp: " + over.GetRasterColorInterpretation().ToString());
}
}
Console.WriteLine("Completed.");
Console.WriteLine("Use: gdalread " + args[0] + " outfile.png [overview] to extract a particular overview!" );
}
catch (Exception e)
{
Console.WriteLine("Application error: " + e.Message);
}
}
public static int ProgressFunc(double Complete, IntPtr Message, IntPtr Data)
{
Console.Write("Processing ... " + Complete * 100 + "% Completed.");
if (Message != IntPtr.Zero)
Console.Write(" Message:" + System.Runtime.InteropServices.Marshal.PtrToStringAnsi(Message));
if (Data != IntPtr.Zero)
Console.Write(" Data:" + System.Runtime.InteropServices.Marshal.PtrToStringAnsi(Data));
Console.WriteLine("");
return 1;
}
}