gpt4 book ai didi

c++ - 如何从 WIC 解码器确定自上而下/自下而上?

转载 作者:行者123 更新时间:2023-12-03 07:03:46 29 4
gpt4 key购买 nike

我正在使用 WIC (Windows Imaging Component) 来解码图像文件并访问像素数据。我试图找出像素顺序(即自下而上或自上而下)。
我用 IWICImagingFactory::CreateDecoderFromFileName创建解码器,我从中获取(第一)帧(IWICBitmapFrameDecode)。对于框架,我使用 GetPixelFormatGetSize计算缓冲区大小,最后我使用 CopyPixels将解码的像素数据放入我的缓冲区。
这适用于各种 JPEG 文件,以自上而下的顺序为我提供像素行,并且像素按 BGRX 顺序 (GUID_WICPixelFormat32bppBGR)。
但是,当我尝试使用 GIF 文件时,像素行是自下而上的。报告的像素格式为 RGBA (GUID_WICPixelFormat32bppRGBA),但基本事实显示 channel 顺序为 BGRA(每个 32 位像素的低字节为蓝色,就像 JPEG 一样)。
我的主要问题:有没有办法查询像素数据的自上而下/自下而上的方向?
我发现了一个类似的问题,询问使用 JPEG 源时的旋转,答案是查询 EXIF 数据以了解图像是否旋转。但 EXIF 不与 GIF 一起使用。所以我想知道我是否应该假设像素总是自下而上的,除了那些确实有 EXIF 方向的像素。 2020 年 6 月 25 日更新 不,JPEG 方向是中性的,GIF 没有方向信息,但 MS Paint 和其他程序可以以正确的方向打开文件。
我的第二个问题:GIF 解码器的 channel 顺序 (RGB/BGR) 不正确是怎么回事?
不仅如此,WIC 文档还说 GIF decoder should return indexes进入颜色表 (GUID_WICPixelFormat8bppIndexed) 而不是实际的像素值。是否有可能我的机器上的某些软件安装了自己的错误 GIF 解码器,取代了 Windows 10 附带的那个?

最佳答案

要查询支持它的格式的照片方向,您应该使用 System.Photo.Orientation使用 IWICMetadataQueryReader 的照片元数据策略(或文件格式特定元数据查询路径之一)界面。
至于GetPixelFormat()报告“不正确”的像素格式,它就在 中备注 部分:

The pixel format returned by this method is not necessarily the pixel format the image is stored as. The codec may perform a format conversion from the storage pixel format to an output pixel format.


Windows 下图像位图的 native 字节顺序是 BGRA,所以这就是你从解码器得到的。如果您想要不同格式的图像,您需要使用 IWICImagingFactory::CreateFormatConverter()创建格式转换器并在复制前转换图像数据。
最后,GIF 没有方向元数据,因为它总是从上到下编码。您得到垂直反转图像的最可能原因是您直接从解码器读取它——尝试调用 CopyPixels()而是在转换器上。

关于c++ - 如何从 WIC 解码器确定自上而下/自下而上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62541502/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com