【问题标题】:Error while opening png image with Gdk::Pixbuf::create_from_resource使用 Gdk::Pixbuf::create_from_resource 打开 png 图像时出错
【发布时间】:2022-07-18 21:11:46
【问题描述】:

我正在尝试使用 Gdk::Pixbuf::create_from_resource: 读取 png 图像:

#include <iostream>
#include <gtkmm.h>

int main(int argc, char *argv[])
{
    auto app = Gtk::Application::create(argc, argv, "org.gtkmm.examples.base");

    Gtk::Window window;
    window.set_default_size(100, 100);

    try  {
        Glib::RefPtr<Gdk::Pixbuf> image
            = Gdk::Pixbuf::create_from_resource("image.png");
    } catch (const Glib::Error &error) {
        std::cerr << "Failed to load an image: " << error.what() << std::endl;
    }

    return app->run(window);
}

但是出现错误:

 $ ./a.out 
Failed to load an image: The resource at “image.png” does not exist
 $ ls -l
total 128
-rwxrwxr-x. 1 user user 36528 Jul 18 15:01 a.out
-rw-r--r--. 1 user user 88792 Jul 18 15:00 image.png
-rw-r--r--. 1 user user   449 Jul 18 15:00 main.cpp

gtkmm 版本 3.24.6

【问题讨论】:

标签: c++ gtk gtk3 gtkmm gtkmm3


【解决方案1】:

如果您想将图像文件直接加载到程序中,而不是:

Glib::RefPtr<Gdk::Pixbuf> image
        = Gdk::Pixbuf::create_from_resource("image.png");

您将使用以下语句:

Glib::RefPtr<Gdk::Pixbuf> image
        = Gdk::Pixbuf::create_from_file("image.png");

如果您确实想将图像文件用作资源,则需要首先使用资源定义 XML 文件通过“glib-compile-resources”函数生成资源文件。例如。

glib-compile-resources --target=image.c --generate-source resource.xml

在您的 XML 文件中,您可能会有某种类型的定义,如下所示。

<gresources>
    <gresource prefix="Image">
        <file preprocess="xml-stripblanks">image.png</file>
    </gresource>
</gresources>

然后在您的程序中,您的创建语句将类似于以下内容。

Glib::RefPtr<Gdk::Pixbuf> image = Gdk::Pixbuf::create_from_resource("Image");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    相关资源
    最近更新 更多