TransformedBitmap更改像素格式和gamma?

时间:2016-10-07 22:42:32

标签: .net wpf wic

我遇到了TransformedBitmap的奇怪行为。

16位灰度TIFF图像(PixelFormats.Gray16)可以很好地加载到BitmapSource中,但是当使用包含缩放变换的TransformedBitmap缩放图像时,WIC将像素格式更改为PixelFormats.Gray32Float并且图像变暗。

这是原始的BitmapSource和TransformedBitmap:

enter image description here

enter image description here

我的线索是WIC出于某种原因对第二张图像应用了伽马校正,但是文档说Gray16和Gray32Float都使用1.0的伽玛,所以根本不应该进行伽马转换。

这是WIC中的错误吗?有没有办法解决TransformedBitmap修改我的图像内容?

1 个答案:

答案 0 :(得分:0)

好的,我找到了解决方案。而是内联创建TransformedBitmap:

bitmapSource = new TransformedBitmap(bitmapSource, transform);

我在BeginInit()和EndInit()调用中使用了以下代码:

TransformedBitmap transformedBitmap = new TransformedBitmap();

transformedBitmap.BeginInit();

transformedBitmap.Source = bitmapSource;
transformedBitmap.Transform = transform;

transformedBitmap.EndInit();

bitmapSource = transformedBitmap;

幸运的是,生成的位图只是在颜色完整的情况下进行了转换。

像素格式仍会更改为Gray32Float,但可以使用FormatConvertedBitmap将其恢复为Gray16。