每个样本图像灰度我有 8 位。我想使用 Libtiff.net 对其进行转换:
using (Tiff input = Tiff.Open(fileIn, "r"))
{
using (Tiff output = Tiff.Open(fileOut, "w"))
{
for (short page = 0; page < input.NumberOfDirectories(); page++)
{
input.SetDirectory(page);
output.SetDirectory(page);
if (input.GetField(TiffTag.COMPRESSION)[0].ToInt() == (int)Compression.LZW)
{
int width = input.GetField(TiffTag.IMAGEWIDTH)[0].ToInt();
int height = input.GetField(TiffTag.IMAGELENGTH)[0].ToInt();
int xres = input.GetField(TiffTag.XRESOLUTION)[0].ToInt();
int yres = input.GetField(TiffTag.YRESOLUTION)[0].ToInt();
int samplesPerPixel = input.GetField(TiffTag.SAMPLESPERPIXEL)[0].ToInt();
int bitsPerSample = input.GetField(TiffTag.BITSPERSAMPLE)[0].ToInt();
int photo = input.GetField(TiffTag.PHOTOMETRIC)[0].ToInt();
int scanlineSize = input.ScanlineSize();
byte[][] buffer = new byte[height][];
for (int i = 0; i < height; ++i){
buffer[i] = new byte[scanlineSize];
input.ReadScanline(buffer[i], i);
}
output.SetField(TiffTag.IMAGEWIDTH, width);
output.SetField(TiffTag.IMAGELENGTH, height);
output.SetField(TiffTag.COMPRESSION, Compression.CCITTFAX4);
output.SetField(TiffTag.PHOTOMETRIC, Photometric.MINISBLACK);
output.SetField(TiffTag.SAMPLESPERPIXEL, 1);
output.SetField(TiffTag.BITSPERSAMPLE, 1);
output.SetField(TiffTag.XRESOLUTION, xres);
output.SetField(TiffTag.YRESOLUTION, yres);
for (int i = 0; i < height; ++i)
output.WriteScanline(buffer[i], i);
output.WriteDirectory();
}
}
}
}
如何将 8 位数组转换为 1 位数组图像?我想在不将字节数组转换为位图对象的情况下做到这一点。什么是正确的方法?谢谢