微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在C#中解析TIFF文件

所有,

我有一个标准的TIFF文件.我需要编写C#代码来读取TIFF文件的每个像素的数据.例如,我不知道数据在这文件中的起始位置等等.有人可以指向一些我可以在C#中获取示例代码链接.

感谢您的帮助!

解决方法

我建议使用 TiffBitmapDecoder课程.一旦创建了此类的实例,就可以访问Frames集合.此集合中的每个帧表示TIFF文件中单个图层的位图数据.您可以在各个帧上使用 CopyPixels方法来创建表示图像像素数据的字节数组.

更新:

namespace TiffExample
{
    using System;
    using System.IO;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;

    public static class Program
    {
        private const int bytesPerPixel = 4; // This constant must correspond with the pixel format of the converted bitmap.

        private static void Main()
        {
            var stream = File.Open("example.tif",FileMode.Open);
            var tiffDecoder = new TiffBitmapDecoder(
                stream,BitmapCreateOptions.PreservePixelFormat | BitmapCreateOptions.IgnoreImageCache,BitmapCacheOption.None);
            stream.dispose();

            var firstFrame = tiffDecoder.Frames[0];
            var convertedBitmap = new FormatConvertedBitmap(firstFrame,PixelFormats.Bgra32,null,0);

            var width = convertedBitmap.PixelWidth;
            var height = convertedBitmap.PixelHeight;

            var bytes = new byte[width * height * bytesPerPixel];

            convertedBitmap.copyPixels(bytes,width * bytesPerPixel,0);

            Console.WriteLine(GetPixel(bytes,548,314,width));

            Console.ReadKey();
        }

        private static Color GetPixel(byte[] bgraBytes,int x,int y,int width)
        {
            var index = (y * (width * bytesPerPixel) + (x * bytesPerPixel));

            return Color.FromArgb(
                bgraBytes[index + 3],bgraBytes[index + 2],bgraBytes[index + 1],bgraBytes[index]);
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐