Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.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# 使用Libtiff.Net读取32位灰度Tiff_C#_Tiff_Grayscale_Libtiff.net - Fatal编程技术网

C# 使用Libtiff.Net读取32位灰度Tiff

C# 使用Libtiff.Net读取32位灰度Tiff,c#,tiff,grayscale,libtiff.net,C#,Tiff,Grayscale,Libtiff.net,我尝试读取一个32位灰度tiff文件,其中图像中的每个像素都包含一个浮点数。但在读取过程中,缓冲区阵列为每个像素包含4个值。例如[像素值=43.0-->像素的字节值={0,0,44,66}]。我无法理解浮点像素值和字节值之间的关系。我还使用缓冲区编写了图像,但输出图像的像素值是int值,如1073872896。如有任何建议,将不胜感激 using (Tiff input = Tiff.Open(@"E:\Sample_04.tif", "r")) { //

我尝试读取一个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++;
                    }
                }
        }
使用(Tiff输入=Tiff.Open(@“E:\Sample_04.tif”,“r”))
{
//获取用于写入输出图像文件的属性
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.photomic)[0].ToInt();
int scanlineSize=input.scanlineSize();
字节[][]缓冲区=新字节[高度][];
对于(int i=0;i
更新1:

我使用c#中的BitConverter类发现了四个字节和像素值之间的关系,如下所示: 字节[]a={0,0,44,66}-->43=位转换器.ToSingle(a,0)和1110179840=位转换器.ToInt32(a,0)。看起来字节被转换为int32,现在的问题是如何将字节值转换为浮点值

更新2: 原始tiff文件和编写代码片段后的tiff已附加。为什么输出tiff文件会出错


我添加了这行代码,将像素值转换为浮点数,效果很好

output.SetField(TiffTag.SAMPLEFORMAT, SampleFormat.IEEEFP);

你怎么知道“图像中的每个像素都包含一个浮点数”?“pixel value=43.0”从何而来?是什么让您相信“输出图像的像素值是像1073872896这样的int值”?为了回答您的问题,我将tiff文件导入ArcMap以显示像素值及其数据类型。