public void AperioSingeTileRead(Tiff InputTiffFile, ref Byte[] targetBuf, PageLevel pageLevel, int xGrid, int yGrid) { if (InputTiffFile != null) { InputTiffFile.SetDirectory(pageLevel.PageIndex); // page必须为short类型 InputTiffFile.ReadEncodedTile(xGrid + yGrid * pageLevel.Tile_XCount, targetBuf, 0, pageLevel.Tile_Width * pageLevel.Tile_Width * 3); } else { targetBuf = null; } }
public void AperioMultiTilesRead(Tiff InputTiffFile, out Byte[] targetBuf, PageLevel pageLevel, int xGrid, int yGrid, int xTiles, int yTiles) { Compression compression = (Compression)InputTiffFile.GetField(TiffTag.COMPRESSION)[0].ToInt(); if (compression != Compression.JPEG | xGrid < 0 | yGrid < 0) { targetBuf = null; return; } if ((pageLevel.Tile_Width == pageLevel.Tile_Height) && (pageLevel.PageIndex <= 2)) { InputTiffFile.SetDirectory(pageLevel.PageIndex); // page必须为short类型 InputTiffFile.ReadMultiEncodedTile(out TargetBuf, xGrid, yGrid, xTiles, yTiles, 0, pageLevel.tile_bytesize); /* 以下代码已被 Tiff ReadMultiEncodedTile 替代 * int width = pageLevel.Tile_Width * xTiles; * int height = pageLevel.Tile_Height * yTiles; * * targetBuf = new Byte[width * height * 3]; * Byte[] tileBuf = new Byte[pageLevel.tile_bytesize]; * * for (int y = 0; y < yTiles; y++) * { * for (int x = 0; x < xTiles; x++) * { * InputTiffFile.ReadEncodedTile((xGrid + x) + (yGrid + y) * (pageLevel.Tile_XCount), tileBuf, 0, pageLevel.tile_bytesize); * for (int xx = 0; xx < pageLevel.Tile_Height; xx++) * { * Buffer.BlockCopy(tileBuf, xx * pageLevel.Tile_Width * 3, targetBuf, * x * pageLevel.Tile_Width * 3 + (xx + y * pageLevel.Tile_Height) * width * 3, pageLevel.Tile_Width * 3); * } * } * } */ targetBuf = TargetBuf; } else { targetBuf = null; return; } }