将 TiffBitmapEncoder 与 Gray32Float 结合使用

Mit*_*tch 5 c# tiff image bitmap image-processing

我正在尝试使用我在 MSDN 上找到的代码创建 32 BPP 灰度 tiff

BitmapSource image = BitmapSource.Create(
                width,
                height,
                96,
                96,
                PixelFormats.Gray32Float,
                null,
                pixels,
                stride);

FileStream stream = new FileStream("test file.tif", FileMode.Create);

TiffBitmapEncoder encoder = new TiffBitmapEncoder();
encoder.Compression = TiffCompressOption.None;
var bitmapFrame = BitmapFrame.Create(image);
encoder.Frames.Add(bitmapFrame);
encoder.Save(stream);
Run Code Online (Sandbox Code Playgroud)

文件已创建,打开时图像看起来正确,但文件属性显示它是 16 BPP (0-65536) 图像,而不是 Gray32Float 参数指定的 32 位浮点

我通过查看 Windows 资源管理器中的文件属性并在ImageJ中打开文件来确认文件格式为 16 BPP

我可以在 Paint.Net 和 ImageJ 中创建 32 个 BPP tiff,以确认支持该格式。

有人知道为什么 .Net TiffBitmapEncoder创建了错误的类型吗?

Rob*_*ves 3

在底层,.Net 使用Windows Imaging Component (WIC)。WIC 支持读取 Gray32Float 格式的 TIFF(WIC 中的 GUID_WICPixelFormat32bppGrayFloat),但不支持写入. 查看 WIC原生像素格式概述。我也有同样的经历,发现该图像被写为 Gray16。

这非常令人沮丧。我一直在尝试使用 Gray32Float 写入一些科学数据,但没有成功。