我使用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} } 修理它?
谢谢!
FromWicBitmap
答案 0 :(得分:0)
正如xoofx指出的那样,事实证明这是由于我在处理FormatConverter时仍处于使用状态的WIC / MemoryStreams所造成的。
这导致JPEG在写入时被破坏,甚至在此之前奇怪地导致TIFF失败。
相应地扩展使用范围并修复它。