首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Libtiff.Net读取32位灰度图

用Libtiff.Net读取32位灰度图
EN

Stack Overflow用户
提问于 2017-05-14 09:11:03
回答 1查看 1.8K关注 0票数 2

我试着读取一个32位灰度的tiff文件,图像中的每个像素都包含一个浮点数。但是在读取过程中,缓冲区数组包含每个像素的4个值。例如,像素值= 43.0 ->像素= {0,0,44,66}的字节值。我无法理解浮动像素值和字节值之间的关系。我还使用缓冲区编写了图像,但是输出图像的像素值是int值,比如1073872896。如有任何建议,将不胜感激。

代码语言:javascript
复制
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(a,0)。似乎字节被转换为int32,现在的问题是如何将字节值转换为浮动?

更新2:,原始tiff文件和tiff,在编写了代码片段后一直是attached.Why,输出tiff文件被搞乱了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-17 15:11:04

我添加了这行代码来将像素值转换为浮点数,它工作得很好。

代码语言:javascript
复制
output.SetField(TiffTag.SAMPLEFORMAT, SampleFormat.IEEEFP);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43962213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档