Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LibTiff.net裁剪tiff文件时更改图像颜色_C#_Colors_Tiff_Libtiff.net - Fatal编程技术网

C# 使用LibTiff.net裁剪tiff文件时更改图像颜色

C# 使用LibTiff.net裁剪tiff文件时更改图像颜色,c#,colors,tiff,libtiff.net,C#,Colors,Tiff,Libtiff.net,我使用以下代码使用LibTiff.net库裁剪Tiff图像的某些部分,但图像颜色更改为假颜色或伪颜色。我还尝试将光度标记更改为其他可能的参数,如YCBCR或Pallete,但结果类似。原始图像和裁剪后的图像附在代码下方。 任何能帮助我解决这个问题的想法都将不胜感激 using (input) { int scanlineSize = input.ScanlineSize(); byte[][] buffer = new by

我使用以下代码使用LibTiff.net库裁剪Tiff图像的某些部分,但图像颜色更改为假颜色或伪颜色。我还尝试将光度标记更改为其他可能的参数,如YCBCR或Pallete,但结果类似。原始图像和裁剪后的图像附在代码下方。 任何能帮助我解决这个问题的想法都将不胜感激

using (input)
        {
            int scanlineSize = input.ScanlineSize();    
            byte[][] buffer = new byte[height][];
            int yy = height/hRatio;
            int xx = width/wRatio;
            int yEnd = yo + yy;

            // read
            int k = 0;
            for (int i = yo; i < yEnd ; i++)
            {
                buffer[k] = new byte[scanlineSize];
                input.ReadScanline(buffer[k], i);
                k++;
            }

            // write
            byte[][] bigHolder = new byte[height][];
            byte[][] holder = new byte[yy][];

            using (Tiff output = Tiff.Open("output.tif", "w"))
            {
                output.SetField(TiffTag.SAMPLESPERPIXEL, samplesPerPixel);
                output.SetField(TiffTag.IMAGEWIDTH, xx);
                output.SetField(TiffTag.IMAGELENGTH, yy);
                output.SetField(TiffTag.BITSPERSAMPLE, bitsPerSample);
                output.SetField(TiffTag.ROWSPERSTRIP, output.DefaultStripSize(0));
                output.SetField(TiffTag.PHOTOMETRIC, photo);
                output.SetField(TiffTag.PLANARCONFIG, PlanarConfig.CONTIG);                

                int j = 0;
                int w = scanlineSize / wRatio;
                for (int i = 0; i < yy; i++)
                {
                    bigHolder[i] = buffer[i].Skip(xo).ToArray();
                    holder[i] = bigHolder[i].Take(w).ToArray();
                    output.WriteScanline(holder[i], j);
                    j++;
                }
            }
        }
使用(输入)
{
int scanlineSize=input.scanlineSize();
字节[][]缓冲区=新字节[高度][];
int yy=高度/小时;
int xx=宽度/宽度;
int-yEnd=yo+yy;
//阅读
int k=0;
for(int i=yo;i

我发现了问题!由于输入tiff每像素包含3个样本,因此我跳过了图像像素的数量,而不是“bigHolder[I]=buffer[I].skip(xo).ToArray();”行中出现的样本。因此,我将xo更改为SamplePerPixel*xo,输出tiff保持原色

iriginak和裁剪图像的TiffTag.photomic和TiffTag.COMPRESSION标记值是多少?我使用getField从输入图像中获取了TiffTag.photomic,并将其替换到输出图像中。此外,我的输入图像不包含任何压缩模式。我发现改变颜色是有关系的;其中,当您注意到输入和输出图像时,红色将转换为绿色,绿色将转换为蓝色,蓝色将转换为红色。