Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.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# 使用扫描线将TIFF转换为位图_C#_Image_Tiff_Libtiff_Libtiff.net - Fatal编程技术网

C# 使用扫描线将TIFF转换为位图

C# 使用扫描线将TIFF转换为位图,c#,image,tiff,libtiff,libtiff.net,C#,Image,Tiff,Libtiff,Libtiff.net,我正在尝试使用libtiffdotnet处理TIFF文件。我需要将TIF转换为System.Bitmap。 文档中有一个关于如何实现的示例。但是这种方法在大型TIFF文件上需要很长时间。因此,我试图获得原始TIFF的扫描线并写入位图。 这是我正在使用的代码 using (Tiff image = Tiff.Open(@"input.tif", "r")){ FieldValue[] value = image.GetField(TiffTag.IMAGEWIDTH); int width = v

我正在尝试使用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");
使用(Tiff image=Tiff.Open(@“input.tif”,“r”)){
FieldValue[]值=image.GetField(TiffTag.IMAGEWIDTH);
int width=值[0]。ToInt();
值=image.GetField(TiffTag.IMAGELENGTH);
int height=值[0]。ToInt();
int stride=image.ScanlineSize();
字节[][]扫描线=新字节[高度][];
位图bmp=新位图(宽度、高度、像素格式.Format32bppArgb);
BitmapData bmpData=bmp.LockBits(新矩形(0,0,bmp.Width,bmp.Height),System.Drawing.Imaging.ImageLockMode.ReadWrite,
像素格式);
IntPtr ptr=bmpData.Scan0;
整数长度=0;
对于(int i=0;i
}

Input.tiff:

Output.png:

我想知道应该怎么做,我做错了什么