通过SharpDX.Direct2D1.Bitmap.FromWicBitmap加载Tiff CCITTv4时出现BadImage错误

时间:2015-03-23 14:07:36

标签: c# image tiff direct2d sharpdx

我使用SharpDX及其附带的WIC和Direct2D包装器来进行服务器端图像处理。

以下代码适用于JPEG图像,并以SharpDX文档和this Microsoft sample using D2D directly via C++为模型。

但是,当我尝试加载TIFF CCITT(双色调1bpp)图像时,出现BadImage错误。 BadImage 错误仅在EndDraw处抛出(稍后会在注释的DrawEndorsement函数中发生),或者在我插入的这行代码中引发错误哪个问题更明显:

SharpDX.Direct2D1.Bitmap bitmap = SharpDX.Direct2D1.Bitmap.FromWicBitmap(_renderTarget, _wicBitmap);

我传入的JPEG图像到达这一点并继续没有问题,但我传入的TIFF到达这一点并导致FromWicBitmap barf并出现BadImage错误。

我使用FormatConverter将TIFF / JPEG像素格式转换为适当且受支持的D2D像素格式,转换器确实更改了两个图像的像素格式GUID,但同样,{{ 1}}仅在TIFF上使用barfs。

我认为我在转换或滥用SharpDX / D2D方面做错了,但是当我构建并运行上述Microsoft C ++ D2D图像查看器示例时,它加载并呈现了这个相同的 TIFF文件,没有错误。我仔细检查了样本的代码,以验证我使用的是所有相同的像素格式,选项等,看起来我和SharpDX几乎完全一样,样本正在使用D2D直接

显然,Direct2D并不喜欢WIC处理它的TIFF图像的像素格式,但为什么MS样本没有表现出相同的行为,为什么没有{{1} } 修理它?

  1. 我错过了D2D示例代码正在做的事情吗?
  2. 我是否错过了SharpDX的一些技巧?
  3. 这是一个SharpDX错误吗?
  4. 谢谢!

    FromWicBitmap

1 个答案:

答案 0 :(得分:0)

正如xoofx指出的那样,事实证明这是由于我在处理FormatConverter时仍处于使用状态的WIC / MemoryStreams所造成的。

这导致JPEG在写入时被破坏,甚至在此之前奇怪地导致TIFF失败。

相应地扩展使用范围并修复它。