本文整理汇总了C#中BitMiracle.LibTiff.Classic.Tiff.ComputeTile方法的典型用法代码示例。如果您正苦于以下问题:C# Tiff.ComputeTile方法的具体用法?C# Tiff.ComputeTile怎么用?C# Tiff.ComputeTile使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类BitMiracle.LibTiff.Classic.Tiff
的用法示例。
在下文中一共展示了Tiff.ComputeTile方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: cvt_by_tile
static bool cvt_by_tile(Tiff inImage, Tiff outImage, int width, int height)
{
int tile_width = 0;
int tile_height = 0;
FieldValue[] result = inImage.GetField(TiffTag.TILEWIDTH);
if (result != null)
{
tile_width = result[0].ToInt();
result = inImage.GetField(TiffTag.TILELENGTH);
if (result != null)
tile_height = result[0].ToInt();
}
if (result == null)
{
Tiff.Error(inImage.FileName(), "Source image not tiled");
return false;
}
outImage.SetField(TiffTag.TILEWIDTH, tile_width);
outImage.SetField(TiffTag.TILELENGTH, tile_height);
// Allocate tile buffer
int raster_size = multiply(tile_width, tile_height);
int rasterByteSize = multiply(raster_size, sizeof(int));
if (raster_size == 0 || rasterByteSize == 0)
{
Tiff.Error(inImage.FileName(),
"Can't allocate buffer for raster of size {0}x{1}", tile_width, tile_height);
return false;
}
int[] raster = new int[raster_size];
byte[] rasterBytes = new byte[rasterByteSize];
// Allocate a scanline buffer for swapping during the vertical mirroring pass.
// (Request can't overflow given prior checks.)
int[] wrk_line = new int[tile_width];
// Loop over the tiles.
for (int row = 0; row < height; row += tile_height)
{
for (int col = 0; col < width; col += tile_width)
{
// Read the tile into an RGBA array
if (!inImage.ReadRGBATile(col, row, raster))
return false;
// For some reason the ReadRGBATile() function chooses the lower left corner
// as the origin. Vertically mirror scanlines.
for (int i_row = 0; i_row < tile_height / 2; i_row++)
{
int topIndex = tile_width * i_row * sizeof(int);
int bottomIndex = tile_width * (tile_height - i_row - 1) * sizeof(int);
Buffer.BlockCopy(raster, topIndex, wrk_line, 0, tile_width * sizeof(int));
Buffer.BlockCopy(raster, bottomIndex, raster, topIndex, tile_width * sizeof(int));
Buffer.BlockCopy(wrk_line, 0, raster, bottomIndex, tile_width * sizeof(int));
}
// Write out the result in a tile.
int tile = outImage.ComputeTile(col, row, 0, 0);
Buffer.BlockCopy(raster, 0, rasterBytes, 0, rasterByteSize);
if (outImage.WriteEncodedTile(tile, rasterBytes, rasterByteSize) == -1)
return false;
}
}
return true;
}