private bool disposedValue = false; // To detect redundant calls protected virtual void Dispose(bool disposing) { if (!disposedValue) { if (disposing) { // TODO: dispose managed state (managed objects). } if (DiffuseMap != null) { DiffuseMap.Dispose(); } if (NormalMap != null) { NormalMap.Dispose(); } if (DiffuseAlphaMap != null) { DiffuseAlphaMap.Dispose(); } if (ColorTable != null) { ColorTable.Dispose(); } if (MaskMap != null) { MaskMap.Dispose(); } if (SpecularMap != null) { SpecularMap.Dispose(); } // TODO: free unmanaged resources (unmanaged objects) and override a finalizer below. // TODO: set large fields to null. disposedValue = true; } }
private Bitmap ReadPaletteBuffered(int xOffset, int yOffset, int xSize, int ySize) { ColorTable ct = _band.GetRasterColorTable(); if (ct == null) { throw new GdalException("Image was stored with a palette interpretation but has no color table."); } if (ct.GetPaletteInterpretation() != PaletteInterp.GPI_RGB) { throw new GdalException("Only RGB palette interpretation is currently supported by this " + " plug-in, " + ct.GetPaletteInterpretation() + " is not supported."); } int count = ct.GetCount(); byte[][] colorTable = new byte[ct.GetCount()][]; for (int i = 0; i < count; i++) { using (ColorEntry ce = ct.GetColorEntry(i)) { colorTable[i] = new[] { (byte)ce.c4, (byte)ce.c1, (byte)ce.c2, (byte)ce.c3 }; } } ct.Dispose(); Band firstBand; bool disposeBand = false; if (_overview >= 0 && _overviewCount > 0) { firstBand = _band.GetOverview(_overview); disposeBand = true; } else { firstBand = _band; } GdalExtensions.NormalizeSizeToBand(firstBand.XSize, firstBand.YSize, xOffset, yOffset, xSize, ySize, out int width, out int height); byte[] indexBuffer = firstBand.ReadBand(xOffset, yOffset, width, height, width, height); if (disposeBand) { firstBand.Dispose(); } byte[] rBuffer = new byte[indexBuffer.Length]; byte[] gBuffer = new byte[indexBuffer.Length]; byte[] bBuffer = new byte[indexBuffer.Length]; byte[] aBuffer = new byte[indexBuffer.Length]; for (int i = 0; i < indexBuffer.Length; i++) { int index = indexBuffer[i]; aBuffer[i] = colorTable[index][0]; rBuffer[i] = colorTable[index][1]; gBuffer[i] = colorTable[index][2]; bBuffer[i] = colorTable[index][3]; } Bitmap result = GdalExtensions.GetBitmap(width, height, rBuffer, gBuffer, gBuffer, aBuffer, NoDataValue); rBuffer = null; gBuffer = null; bBuffer = null; aBuffer = null; return(result); }