【问题标题】:How to change Gtk::Image after object creation when PixBuf is given给定 PixBuf 时如何在对象创建后更改 Gtk::Image
【发布时间】:2016-06-28 15:32:55
【问题描述】:

我试图通过给它 pixbuf 来更改Gtk::Image-derived 对象,但我不知道如何处理。

简单的设置可以模仿为:

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

class MyImage : public Gtk::Image
{
public:
    void setPixBuf(Glib::RefPtr<Gdk::Pixbuf> pixbuf);
};

void MyImage::setPixBuf(Glib::RefPtr<Gdk::Pixbuf> pixbuf)
{
    // How can i override the existing pixbuf here?
}

void freeImagePixelData(const guint8* data)
{
    delete[] data;
}
Glib::RefPtr<Gdk::Pixbuf> generateTestImage()
{
    guint8 *data = new guint8[40*40*4];
    for(int i=0; i<40*40*4; )
    {
        data[i++] = (guint8)255;    // R
        data[i++] = (guint8)255;    // G
        data[i++] = (guint8)0;      // B
        data[i++] = (guint8)255;    // A
    }

    Glib::RefPtr<Gdk::Pixbuf> pixbuf = Gdk::Pixbuf::create_from_data(
        data, Gdk::Colorspace::COLORSPACE_RGB, true, 8, 40, 40,  40*4, sigc::ptr_fun(&freeImagePixelData));
    return pixbuf;
}

int main(int argc, char** argv)
{
    Glib::RefPtr<Gtk::Application> app = Gtk::Application::create(argc, argv, "com.almost-university.gtkmm.image.pixbuf");

    Gtk::Window window;

    MyImage im1;
    im1.setPixBuf(generateTestImage());
    window.add(im1);

    window.show_all_children();

    app->run(window);

    return 0;
}

(请注意,这是我试图弄清楚的一个过于简化的版本,我知道我应该使用 Gtk::manage 而不是在没有另一个容器的情况下直接向窗口添加东西,这只是一个模拟-向上)。

我知道如果我要使用构造函数来生成图像:

    Gtk::Image im2(generateTestImage());
    window.add(im2);

那么我实际上会得到一个黄色方块。

不知何故,我拒绝相信一个人只能在创建对象时使用 pixbuf。一定有办法以某种方式设置图像数据,我就是找不到所需的功能。

【问题讨论】:

    标签: c++ gtk gtkmm3


    【解决方案1】:

    要在 Gtk::Image 中设置 Pixbuf,您可以使用 Gtk::Image::set(const Glib::RefPtr&lt; Gdk::Pixbuf &gt;&amp; pixbuf) 方法:

    void MyImage::setPixBuf(Glib::RefPtr<Gdk::Pixbuf> pixbuf)
    {
        set(pixbuf);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-04
      • 2012-08-06
      • 1970-01-01
      • 2021-01-17
      • 1970-01-01
      • 2022-06-15
      相关资源
      最近更新 更多