c++win32wic或d2d如何获取png图片高宽
时间: 2024-11-27 17:18:41 浏览: 7
dotnet win32 使用 WIC 获取系统编解码器.rar
在C++ Win32 WIC(Windows Imaging Component)环境中获取PNG图片的宽度和高度,可以使用Windows Imaging APIs(WIC)。这里提供一个简单的示例[^2]:
```cpp
#include <windowsx.h>
#include <wicapi.h>
using namespace Microsoft::WICImaging;
int main()
{
ComPtr<IWICBitmapDecoder> decoder;
ComPtr<IWICBitmapFrameDecode> frame;
// 加载PNG文件
if (SUCCEEDED(HRESULT_FROM_WIN32(Create绕过...))) { // 创建文件IStream
if (SUCCEEDED(WICCreateDecoderFromStream(IStream*, GUID_WICGifDecoder, nullptr, &decoder))) {
if (SUCCEEDED(decoder->GetFrame(0, &frame))) {
// 获取尺寸信息
IWICMetadataQueryWriter* metadataWriter = nullptr;
if (SUCCEEDED(frame->CopyPropertiesTo(&metadataWriter))) {
WICPixelFormatGUID format;
if (SUCCEEDED(metadataWriter->GetProperty(GUID_WICPixelFormat, &format))) {
uint32_t width, height;
if (SUCCEEDED(metadataWriter->GetPropertySize(GUID_WICImageWidth, &width) &&
SUCCEEDED(metadataWriter->GetPropertySize(GUID_WICImageHeight, &height))) {
if (SUCCEEDED(metadataWriter->GetProperty(GUID_WICImageWidth, &width) &&
SUCCEEDED(metadataWriter->GetProperty(GUID_WICImageHeight, &height)))) {
printf("Image Width: %u, Height: %u\n", width, height);
}
}
metadataWriter->Release();
}
}
frame.Release();
}
decoder.Release();
}
}
return 0;
}
```
而对于Direct2D[^1],虽然其主要用于图形渲染,但不直接支持获取图片的原始尺寸。如果你想要在D2D中处理图片,通常会先通过WIC加载图片到内存,然后再处理。不过,如果你确实需要D2D支持原图尺寸,可能需要借助第三方库或者自定义代码。
阅读全文