【问题标题】:Visual Studio 2008 resource editor is annoying with PNG'sVisual Studio 2008 资源编辑器对 PNG 很烦
【发布时间】:2026-02-10 00:45:01
【问题描述】:

我在 VS2008 中有一个资源 DLL 项目,其中主要包含 PNG 图像。每次我将新图像导入资源文件时,都会收到 RC2170 错误:对于之前在资源文件中的每个 PNG,位图文件不是 3.0 格式。

问题是,在我添加新图像之前,所有这些图像都已符合要求。只有在我从资源文件中删除所有这些图像并再次导入它们(未更改)之后,它才会编译。

对于添加的每个新 PNG 文件,这种行为都会重复,并且随着 PNG 文件数量的增加,它变得越来越烦人。

有人经历过类似的事情吗?有什么解决办法吗?

顺便说一句:我实际上并不需要资源编辑器将 PNG 文件识别为图像,如果这样可以解决这个问题。

【问题讨论】:

    标签: visual-studio-2008 png resource-file


    【解决方案1】:

    根据this thread,您在资源编辑器中遇到了一个更改的错误:

    IDI_DENTIFIER PNG "background.png"
    至:
    IDI_DENTIFIER BITMAP "background.png"

    但请注意:当通过 LoadImage() 调用时,这些 PNG 资源似乎不会在 Vista 之前的操作系统上加载。使用此资源类型可能会将您的应用程序限制为 Vista。

    【讨论】:

    • 是的,在 rc 文件中手动将 BITMAP 更改为 PNG 即可解决问题。
    【解决方案2】:

    资源编辑器不直接支持 PNG 图片。您必须将它们添加为二进制文件,如下所示:

    IDI_BACKGROUND  RCDATA    "background.png"
    

    然后您可以使用 GDI+ 从您的资源文件中加载它们。这在this article (C++) 中有解释

    【讨论】:

      【解决方案3】:

      我为此苦苦挣扎,但发现(至少在 Visual Studio 2012 中)您可以轻松地将 png 文件添加为资源。在资源视图中,右键单击 .rc 文件名并选择“添加资源”。选择类型“位图”并单击“导入”。选择所需的 .png 文件。应在资源列表中添加一个名为“PNG”的新部分,它应该像 BITMAP 资源一样工作。

      我偶尔会看到这种情况失败 - 如果是这样,请使用 .bmp 扩展名保存您的 png 文件的副本(或将其保存为位图),然后将其添加为上述位图。编辑资源文件,你会看到这样一行:

      IDB_NEWFILE BITMAP "NewFile.bmp"

      改成

      IDB_NEWFILE PNG "NewFile.png"

      并保存文件。下次您查看项目的资源时,应该已经创建了“PNG”部分(即使带有注释标题!)

      但是,据我所知,具有透明度的 png 文件要么无法正确显示,要么在加载时会导致崩溃(例如,加载到按钮中)。

      【讨论】: