1

我正在尝试使用 libtiffdotnet 处理 TIFF 文件。我需要将 TIF 转换为 System.Bitmap。文档中有一个关于如何完成的示例。但是这种方法在大型 TIFF 文件上需要很长时间。所以我试图获取原始 TIFF 的扫描线并写入位图。这是我正在使用的代码

using (Tiff image = Tiff.Open(@"input.tif", "r")){
FieldValue[] value = image.GetField(TiffTag.IMAGEWIDTH);
int width = value[0].ToInt();

value = image.GetField(TiffTag.IMAGELENGTH);
int height = value[0].ToInt();

int stride = image.ScanlineSize();
byte[][] scanline = new byte[height][];


Bitmap bmp = new Bitmap(width, height, PixelFormat.Format32bppArgb);
BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), System.Drawing.Imaging.ImageLockMode.ReadWrite,
    bmp.PixelFormat);
IntPtr ptr = bmpData.Scan0;
int length = 0;
for (int i = 0; i < height; i++)
{
    scanline[i] = new byte[width];
    image.ReadScanline(scanline[i], i);
    System.Runtime.InteropServices.Marshal.Copy(scanline[i], 0, ptr + length, stride);
    length += stride*4;
}
bmp.UnlockBits(bmpData);
bmp.Save(@"output.png");

}

Input.tiff: 在此处输入图片描述

Output.png : 在此处输入图片描述

我想知道它应该如何实际完成,我做错了什么。

4

0 回答 0