将瓷砖从一个tiff复制到另一个tiff(4波段)

时间:2012-02-27 19:22:48

标签: c# .net tiff rgba libtiff.net

我正在尝试简单地使用偏移来从一个tiff图像中选择图块并将它们写入另一个图像。我正在使用libtiff.net。而不是每个像素具有ARGB值,有一个像素是alpha,那么右边的像素是红色像素,右边的像素是绿色,当然右边的像素是绿色的。蓝色。我需要将这4个像素存储在一个中,并且正在发生一些事情。你能看出这个逻辑有什么问题吗?

using (Tiff output = Tiff.Open(@"C:\base.tif", "w"))
{
    if (output == null)
    {
        System.Console.Error.WriteLine("Could not open outgoing image");
        return;
    }


    // We need to know the width and the height before we can malloc
    int[] raster = new int[tileWidth * tileHeight];

    // Write the tiff tags to the file
    output.SetField(TiffTag.IMAGEWIDTH, 1024);
    output.SetField(TiffTag.IMAGELENGTH, 1024);
    output.SetField(TiffTag.TILEWIDTH, 256);
    output.SetField(TiffTag.TILELENGTH, 256);
    output.SetField(TiffTag.COMPRESSION, Compression.DEFLATE);
    output.SetField(TiffTag.PLANARCONFIG, PlanarConfig.CONTIG);
    output.SetField(TiffTag.PHOTOMETRIC, Photometric.RGB);
    output.SetField(TiffTag.BITSPERSAMPLE, 8);
    output.SetField(TiffTag.SAMPLESPERPIXEL, numOfBands);

    byte[] inputBuffer = new byte[tileWidth * tileHeight * numOfBands];

    // loop through every tile column
    for (int x = 0; x < 1024 / tileWidth; x++)
    {
        // loop through every tile row in the current column
        for (int y = 0; y < 1024 / tileHeight; y++)
        {
            image.ReadRGBATile((x + xOffset) * tileWidth, (y + yOffset) * tileHeight, raster);
            Tiff.IntsToByteArray(raster, 0, raster.Length, inputBuffer, 0);
            output.WriteEncodedTile(getTileIndex(x, y, 1024 / tileWidth), inputBuffer, 0, raster.Length);
        }
    }
}

0 个答案:

没有答案