private void ReadARGB() { if (_dataset.RasterCount < 4) { throw new GdalException("ARGB Format was indicated but there are only " + _dataset.RasterCount + " bands!"); } _alpha = _red; _red = _dataset.GetRasterBand(2); _green = _dataset.GetRasterBand(3); _blue = _dataset.GetRasterBand(4); int tw = TileCollection.TileWidth; int th = TileCollection.TileHeight; for (int row = 0; row < TileCollection.NumTilesTall(); row++) { for (int col = 0; col < TileCollection.NumTilesWide(); col++) { int width = TileCollection.GetTileWidth(col); int height = TileCollection.GetTileHeight(row); MWImageData id = new MWImageData(width, height); Bitmap image = new Bitmap(width, height, PixelFormat.Format32bppArgb); byte[] red = new byte[width * height]; byte[] g = new byte[width * height]; byte[] b = new byte[width * height]; byte[] a = new byte[width * height]; _red.ReadRaster(col * tw, row * th, width, height, red, width, height, 0, 0); _green.ReadRaster(col * tw, row * th, width, height, g, width, height, 0, 0); _blue.ReadRaster(col * tw, row * th, width, height, b, width, height, 0, 0); _alpha.ReadRaster(col * tw, row * th, width, height, a, width, height, 0, 0); BitmapData bData = image.LockBits(new Rectangle(0, 0, Width, Height), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb); Stride = bData.Stride; image.UnlockBits(bData); byte[] vals = new byte[Width * Height * 4]; int stride = Stride; const int bpp = 4; for (int r = 0; r < height; r++) { for (int c = 0; c < width; c++) { vals[r * stride + c * bpp] = b[r * width + c]; vals[r * stride + c * bpp + 1] = g[r * width + c]; vals[r * stride + c * bpp + 2] = red[r * width + c]; vals[r * stride + c * bpp + 3] = a[r * width + c]; } } id.Values = vals; id.WriteBytes(); TileCollection.Tiles[row, col] = id; } } SetTileBounds(Bounds.AffineCoefficients); }
private void ReadGrayIndex() { int tw = TileCollection.TileWidth; int th = TileCollection.TileHeight; for (int row = 0; row < TileCollection.NumTilesTall(); row++) { for (int col = 0; col < TileCollection.NumTilesWide(); col++) { int width = TileCollection.GetTileWidth(col); int height = TileCollection.GetTileHeight(row); MWImageData id = new MWImageData(width, height); byte[] red = new byte[width * height]; _red.ReadRaster(col * tw, row * th, width, height, red, width, height, 0, 0); Bitmap image = new Bitmap(width, height); BitmapData bData = image.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb); Stride = bData.Stride; image.UnlockBits(bData); byte[] vals = new byte[width*height*4]; int stride = Stride; const int bpp = 4; for (int r = 0; r < height; r++) { for (int c = 0; c < width; c++) { vals[r*stride + c*bpp] = red[r*width + c]; vals[r*stride + c*bpp + 1] = red[r*width + c]; vals[r*stride + c*bpp + 2] = red[r*width + c]; vals[r*stride + c*bpp + 3] = 255; } } id.Values = vals; id.WriteBytes(); TileCollection.Tiles[row, col] = id; } } SetTileBounds(Bounds.AffineCoefficients); }