使用LibTiff.Net库读写连续帧tif文件,读写16位raw数据,支持BigTiff文件

声明存放数据变量List listData = new List();
读取tif文件:由于图片数据可能不在连续位置,使用函数ScanlineSize分多次读取行数据。

private void ReadTiff(string fileName)
        {
            Tiff tif = Tiff.Open(fileName, "r");
            if (tif == null) return;
            FieldValue[] value = tif.GetField(TiffTag.IMAGEWIDTH);
            width = value[0].ToInt();
            value = tif.GetField(TiffTag.IMAGELENGTH);
            height = value[0].ToInt();
            value = tif.GetField(TiffTag.BITSPERSAMPLE);
            int bits = value[0].ToInt();
            short dirNumb = tif.NumberOfDirectories();
            listData.Clear();
            for (short i = 0; i < dirNumb; i++)
            {
                tif.SetDirectory(i);
                int lineSize = tif.ScanlineSize();
                byte[] rowData = new byte[lineSize];
                byte[] data = new byte[height * width * (bits / 8)];
                for (int j = 0; j < height; j++)
                {
                    tif.ReadScanline(rowData, j);
                    rowData.CopyTo(data, j * lineSize);
                }
                listData.Add(data);
            }
            tif.Close();
        }

写入tif文件

private void WriteTiff()
        {
            Tiff tif = Tiff.Open(@"res.tif", "w");
            for (short i = 0; i < listData.Count; i++)
            {
                tif.SetField(TiffTag.PLANARCONFIG, PlanarConfig.CONTIG);
                tif.SetField(TiffTag.IMAGEWIDTH, width);//设置图片宽度
                tif.SetField(TiffTag.IMAGELENGTH, height);//设置图片高度
                tif.SetField(TiffTag.COMPRESSION, Compression.NONE);
                tif.SetField(TiffTag.PHOTOMETRIC, Photometric.MINISBLACK);
                tif.SetField(TiffTag.BITSPERSAMPLE, 16);//设置图片数据位数
                tif.SetField(TiffTag.SAMPLESPERPIXEL, 1);//设置图片通道数
                tif.WriteRawStrip(0, listData[i], listData[i].Length);
                tif.WriteDirectory();
            }
            tif.Close();
        }

项目源码下载地址

你可能感兴趣的:(C#,BigTiff,LibTiff.Net,读写连续帧图片)