【问题标题】:Changing in image colors when crop a tiff file using LibTiff.net使用 LibTiff.net 裁剪 tiff 文件时更改图像颜色
【发布时间】:2017-04-22 14:50:07
【问题描述】:

我使用以下代码使用 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++;
                }
            }
        }

【问题讨论】:

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

标签: c# colors tiff libtiff.net


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多