Example #1
0
 private void Dispose(bool disposing)
 {
     if (!disposed)
     {
         if (disposing)
         {
             if (_GdalDataset != null)
             {
                 try {
                     _GdalDataset.Dispose();
                 }
                 finally { _GdalDataset = null; }
             }
         }
         disposed = true;
     }
 }
Example #2
0
        /// <summary>
        /// initialize a Gdal based raster layer
        /// </summary>
        /// <param name="strLayerName">Name of layer</param>
        /// <param name="imageFilename">location of image</param>
        public GdalRasterLayer(string strLayerName, string imageFilename)
        {
            this.LayerName = strLayerName;
            this.Filename  = imageFilename;
            disposed       = false;

            GDAL.gdal.AllRegister();
            try
            {
                _GdalDataset = GDAL.gdal.Open(_Filename, GDAL.gdalconst.GA_ReadOnly);
                imagesize    = new Size(_GdalDataset.RasterXSize, _GdalDataset.RasterYSize);

                _Envelope = this.GetExtent();
            }
            catch (Exception ex) {
                _GdalDataset = null;
                throw new Exception("Couldn't load dataset. " + ex.Message + ex.InnerException);
            }
        }
Example #3
0
        /// <summary>
        /// initialize a Gdal based raster layer
        /// </summary>
        /// <param name="strLayerName">Name of layer</param>
        /// <param name="imageFilename">location of image</param>
        public GdalRasterLayer(string strLayerName, string imageFilename)
        {
            this.LayerName = strLayerName;
            this.Filename = imageFilename;
            disposed = false;

            GDAL.gdal.AllRegister();
            try
            {
				_GdalDataset = GDAL.gdal.Open(_Filename, GDAL.gdalconst.GA_ReadOnly);
				imagesize = new Size(_GdalDataset.RasterXSize, _GdalDataset.RasterYSize);
                
				_Envelope = this.GetExtent();
            }
            catch (Exception ex) { 
                _GdalDataset = null;
                throw new Exception("Couldn't load dataset. " + ex.Message + ex.InnerException);
            }
 
        }
Example #4
0
        private void GetPreview(GDAL.Dataset dataset, System.Drawing.Size size, Graphics g, SharpMap.Geometries.BoundingBox bbox)
        {
            double [] geoTrans = new double[6];
            dataset.GetGeoTransform(geoTrans);
            GeoTransform GT = new GeoTransform(geoTrans);

            int DsWidth  = dataset.RasterXSize;
            int DsHeight = dataset.RasterYSize;

            Bitmap bitmap     = new Bitmap(size.Width, size.Height, PixelFormat.Format24bppRgb);
            int    iPixelSize = 3; //Format24bppRgb = byte[b,g,r]

            if (dataset != null)
            {
                /*
                 * if ((float)size.Width / (float)size.Height > (float)DsWidth / (float)DsHeight)
                 *  size.Width = size.Height * DsWidth / DsHeight;
                 * else
                 *  size.Height = size.Width * DsHeight / DsWidth;
                 */


                double left   = Math.Max(bbox.Left, _Envelope.Left);
                double top    = Math.Min(bbox.Top, _Envelope.Top);
                double right  = Math.Min(bbox.Right, _Envelope.Right);
                double bottom = Math.Max(bbox.Bottom, _Envelope.Bottom);


                int x1      = (int)GT.PixelX(left);
                int y1      = (int)GT.PixelY(top);
                int x1width = (int)GT.PixelXwidth(right - left);

                int y1height = (int)GT.PixelYwidth(bottom - top);


                bitmap = new Bitmap(size.Width, size.Height, PixelFormat.Format24bppRgb);
                BitmapData bitmapData = bitmap.LockBits(new Rectangle(0, 0, size.Width, size.Height), ImageLockMode.ReadWrite, bitmap.PixelFormat);

                try
                {
                    unsafe
                    {
                        for (int i = 1; i <= (dataset.RasterCount > 3 ? 3 : dataset.RasterCount); ++i)
                        {
                            byte[]    buffer = new byte[size.Width * size.Height];
                            GDAL.Band band   = dataset.GetRasterBand(i);

                            //band.ReadRaster(x1, y1, x1width, y1height, buffer, size.Width, size.Height, (int)GT.HorizontalPixelResolution, (int)GT.VerticalPixelResolution);
                            band.ReadRaster(x1, y1, x1width, y1height, buffer, size.Width, size.Height, 0, 0);

                            int p_indx = 0;
                            int ch     = 0;

                            if (band.GetRasterColorInterpretation() == 5)
                            {
                                ch = 0;
                            }
                            if (band.GetRasterColorInterpretation() == 4)
                            {
                                ch = 1;
                            }
                            if (band.GetRasterColorInterpretation() == 3)
                            {
                                ch = 2;
                            }
                            if (band.GetRasterColorInterpretation() != 2)
                            {
                                for (int y = 0; y < size.Height; y++)
                                {
                                    byte *row = (byte *)bitmapData.Scan0 + (y * bitmapData.Stride);
                                    for (int x = 0; x < size.Width; x++, p_indx++)
                                    {
                                        row[x * iPixelSize + ch] = buffer[p_indx];
                                    }
                                }
                            }
                            else //8bit Grayscale
                            {
                                for (int y = 0; y < size.Height; y++)
                                {
                                    byte *row = (byte *)bitmapData.Scan0 + (y * bitmapData.Stride);
                                    for (int x = 0; x < size.Width; x++, p_indx++)
                                    {
                                        row[x * iPixelSize]     = buffer[p_indx];
                                        row[x * iPixelSize + 1] = buffer[p_indx];
                                        row[x * iPixelSize + 2] = buffer[p_indx];
                                    }
                                }
                            }
                        }
                    }
                }
                finally
                {
                    bitmap.UnlockBits(bitmapData);
                }
            }
            g.DrawImage(bitmap, new System.Drawing.Point(0, 0));
        }
Example #5
0
		private void Dispose(bool disposing)
		{
			if (!disposed)
			{
				if (disposing)
                    if (_GdalDataset != null)
					{
						try {
							_GdalDataset.Dispose();
                        }
                        finally { _GdalDataset = null; }
					}
				disposed = true;
			}
		}