Я попытался прочитать 32-битный файл TIFF в оттенках серого, в котором каждый пиксель изображения содержит число с плавающей запятой. Но в процессе чтения буферный массив содержит 4 значения для каждого пикселя. Например [значение пикселя = 43,0 -> байтовые значения для пикселя = {0, 0, 44, 66}]. Я не могу понять связь между значением пикселя с плавающей запятой и байтовым значением. Я также написал изображение, используя буфер, но значения пикселей для выходного изображения - это значения типа int, например 1073872896. Любое предложение будет оценено.
using (Tiff input = Tiff.Open(@"E:\Sample_04.tif", "r"))
{
// get properties to use in writing output image file
int width = input.GetField(TiffTag.IMAGEWIDTH)[0].ToInt();
int height = input.GetField(TiffTag.IMAGELENGTH)[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);
}
using (Tiff output = Tiff.Open("output.tif", "w"))
{
output.SetField(TiffTag.SAMPLESPERPIXEL, samplesPerPixel);
output.SetField(TiffTag.IMAGEWIDTH, width);
output.SetField(TiffTag.IMAGELENGTH, height);
output.SetField(TiffTag.BITSPERSAMPLE, bitsPerSample);
output.SetField(TiffTag.ROWSPERSTRIP, output.DefaultStripSize(0));
output.SetField(TiffTag.PHOTOMETRIC, photo);
output.SetField(TiffTag.PLANARCONFIG, PlanarConfig.CONTIG);
output.SetField(TiffTag.COMPRESSION, compression);
int j = 0;
for (int i = 0; i < h; i++)
{
output.WriteScanline(buffer[i], j);
j++;
}
}
}
Обновление 1:
Я выяснил связь между четырьмя байтами и значением пикселя с помощью класса BitConverter в C #, который выглядит следующим образом: byte [] a = {0, 0, 44, 66} -> 43 = BitConverter.ToSingle (a, 0) и 1110179840 = BitConverter.ToInt32 (а, 0). Кажется, байты преобразуются в int32, и теперь вопрос в том, как преобразовать байтовые значения в float?
Обновление 2: исходный файл TIFF и сообщение TIFF после написания кода фрагмента были прикреплены. Почему выходной файл TIFF испорчен?