在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]);
        }
    }
}

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...