/******************************************************************************
* $Id: GDALOverviews.cs 13678 2008-02-02 23:29:37Z tamas $
*
* Name: GDALOverviews.cs
* Project: GDAL CSharp Interface
* Purpose: A sample app to get the band histograms.
* Author: Tamas Szekeres, szekerest@gmail.com
*
******************************************************************************
* Copyright (c) 2007, Tamas Szekeres
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*****************************************************************************/
using System;
using OSGeo.GDAL;
/**
*
Title: GDAL C# GDALGetHistogram example.
* Description: A sample app to get the band histograms.
* @author Tamas Szekeres (szekerest@gmail.com)
* @version 1.0
*/
///
/// A C# based sample to get the band histograms.
///
class GDALGetHistogram {
public static void usage()
{
Console.WriteLine("usage: gdalgethistogram {GDAL dataset name}");
System.Environment.Exit(-1);
}
public static void Main(string[] args)
{
if (args.Length < 1) usage();
Console.WriteLine("");
try
{
/* -------------------------------------------------------------------- */
/* Register driver(s). */
/* -------------------------------------------------------------------- */
Gdal.AllRegister();
/* -------------------------------------------------------------------- */
/* Open dataset. */
/* -------------------------------------------------------------------- */
Dataset ds = Gdal.Open( args[0], Access.GA_ReadOnly );
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 + ")");
/* -------------------------------------------------------------------- */
/* Get the Histogram arrays */
/* -------------------------------------------------------------------- */
for (int iBand = 1; iBand <= ds.RasterCount; iBand++)
{
Console.WriteLine("Band " + iBand + ":");
int[] histData = new int[256];
Band band = ds.GetRasterBand(iBand);
double pdfMin, pdfMax, pdfMean, pdfStdDev;
band.GetStatistics(0, 1, out pdfMin, out pdfMax, out pdfMean, out pdfStdDev);
Console.WriteLine("Min=" + pdfMin);
Console.WriteLine("Max=" + pdfMax);
Console.WriteLine("Mean=" + pdfMean);
Console.WriteLine("StdDev=" + pdfStdDev);
band.GetHistogram(-0.5, 255.5, 255, histData, 0, 1,
new Gdal.GDALProgressFuncDelegate(ProgressFunc), "");
for (int i = 0; i < 255; i++)
Console.Write(String.Format(" {0:x}", histData[i]));
Console.WriteLine("");
}
Console.WriteLine("Completed.");
}
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;
}
}