有什么方法可以在不使用 GDI+ 的情况下从我的资源中加载 .png 吗?
Is there any way to load a .png from my resources without using GDI+?
我正在尝试加载存储在我的项目资源中的 .png,以便将其设置在图片控件中,但我不太明白为什么。我做了一些研究,通常的 LoadImage() 调用似乎并不真正支持 .png。
但是,如果可以的话,我真的不想将它转换为位图。
到目前为止,我只找到了有关如何使用 GDI+ 或真正古老的 win32-api 代码执行此操作的资源。
有什么方法可以按照当今的标准本地加载 .png 文件吗?
"new" 的方法是 Direct2D 和 WIC,这在 Windows Imaging Component and Direct2D Image Viewer Win32 Sample.
中进行了演示
但是,如果您的应用程序的其余部分是基本控件,那么 Direct2D 就太过分了。图像必须在某个时候转换为位图才能显示——无论是在 GPU 中还是在内存中——而 GDI+ 适合这种用例。
如果这些资源是图标或其他一些 small-ish 文件 (<2mp),我建议将资源作为位图嵌入。您可以将资产管道保留为 PNG,只需添加一个 pre-build 步骤将您的 PNG 转换为 pre-multiplied BGRA 位图并使用 LoadResource
。有are pre-built tools可以满足这个需求。
我正在尝试加载存储在我的项目资源中的 .png,以便将其设置在图片控件中,但我不太明白为什么。我做了一些研究,通常的 LoadImage() 调用似乎并不真正支持 .png。
但是,如果可以的话,我真的不想将它转换为位图。
到目前为止,我只找到了有关如何使用 GDI+ 或真正古老的 win32-api 代码执行此操作的资源。
有什么方法可以按照当今的标准本地加载 .png 文件吗?
"new" 的方法是 Direct2D 和 WIC,这在 Windows Imaging Component and Direct2D Image Viewer Win32 Sample.
中进行了演示但是,如果您的应用程序的其余部分是基本控件,那么 Direct2D 就太过分了。图像必须在某个时候转换为位图才能显示——无论是在 GPU 中还是在内存中——而 GDI+ 适合这种用例。
如果这些资源是图标或其他一些 small-ish 文件 (<2mp),我建议将资源作为位图嵌入。您可以将资产管道保留为 PNG,只需添加一个 pre-build 步骤将您的 PNG 转换为 pre-multiplied BGRA 位图并使用 LoadResource
。有are pre-built tools可以满足这个需求。