- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我猜有人可能会觉得它微不足道,但我在这里问它是因为我找不到直接的答案。
让我们深入探讨这个问题:
拥有多个图像资源以及不断使用这些图像的 cairo 上下文。当然,我可以这样做:
Glib::RefPtr<Gdk::Pixbuf> image;
image = Gdk::Pixbuf::create_from_resource("/image/icon1"); //there are numerous icons out there
然后我可以像这样将它与 Cairo 上下文指针一起使用:
bool MyClass::on_draw(const Cairo::RefPtr<Cairo::Context> &cr)
{
// ... some code
Gdk::Cairo::set_source_pixbuf(cr, image, x0 , y0); //x0 , y0 : somewhere in the context
cr->paint();
return true;
}
图像没有改变,但它每次都会创建 Pixbuf 实例。我想使用 c++ map 并将我的图标放入其中。然后,我想从 map 中获取图像指针。我做了这样的事情:
std::map<Glib::ustring , GdkPixbuf*> map_Images;
// ..
map_images.insert(pair<Glib::ustring , GdkPixbuf* >("icon1" , image->gobj() )); // I do the same with all of my frequently referred icons
现在,我不知道应该如何调用此 map 以用于开罗上下文。换句话说,我应该如何从基础对象中创建一个 Glib::RefPtr,比如说 GdkPixbuf*
最佳答案
我建议你制作 map_Images
std::map<Glib::ustring , Glib::RefPtr<Gdk::Pixbuf> >
类型的 map 并使其成为 MyClass
的数据成员.因为Glib::RefPtr
一旦对该指针的所有引用都丢失,将释放拥有对象。
我想说的是,如果你有类似这样的代码:
... some function, say fun1
{
Glib::RefPtr<Gdk::Pixbuf> image;
image = Gdk::Pixbuf::create_from_resource("/image/icon1");
map_images.insert(pair<Glib::ustring , GdkPixbuf* >("icon1" , image->gobj() ));
} // image object will die here. So, Gdk::Pixbuf held by Glib::RefPtr will be deallocated
现在,如果您尝试访问 Gdk::Pixbuf *
从 map 上,你会得到悬空指针。
如果是这样,请跳过接下来的部分。否则,请继续阅读。
正在创建 Glib::RefPtr
类型 Gdk::Pixbuf
似乎很简单。根据我在 GitHub 上找到的源代码:https://github.com/GNOME/glibmm/blob/master/glib/glibmm/refptr.h , make_refptr_for_instance(T_CppObject* object)
API 应该为您完成这项工作。
如果你真的想创建Glib::RefPtr
类型 Gdk::Pixbuf
,您可以通过以下方式获取:
Glib::RefPtr<Gdk::Pixbuf> imageForIcon1 = make_refptr_for_instance<Gdk::Pixbuf>(map_images["icon1"]); // assumption: map_images already has an element with key "icon1"
希望对您有所帮助。
关于c++ - 如何创建 Gdk::Pixbuf 实例的 std::map 并在 Gdk::Cairo 中使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53969670/
无论我将什么图片加载到 Gdk::Pixbuf(使用 GTKmm),它总是显示相同的信息。我正在使用函数 get_n_channels()、get_bits_per_sample() 和 get_ha
org.gnome.gdk.Pixbuf 构造函数的文件路径参数相对于哪个目录?我应该将文件放在哪里? Main.java public class Main { public static
如何将 System.Drawing.Bitmap 转换为 GDK# Image 以便我可以设置为图像小部件。 我试过这个... System.Drawing.Bitmap b = new Bitma
我有一个像素值缓冲区。是否可以使用 gtk 中的 pixbuf 将缓冲区显示为图像。我将使用c语言。 最佳答案 是的,看看这个函数: gdk_pixbuf_new_from_data () GdkPi
使用 GTK+ 3.6 我想显示内存缓冲区中的图像,而不是磁盘上的文件。我有一个包含图像数据的 const char *data,我正在尝试从中创建一个 GTK 图像。到目前为止,我已经尝试了两种我认
我有一个来自 svg 的 gtk - pixbuf,我想在特定坐标处将其裁剪为特定大小。 有人对此有简单可行的解决方案吗? 最佳答案 以不同的方式解决它: 简单地用坐标创建了一个 subpixbuf:
我正在尝试将 *.jpg 图像加载到 Gdk::Pixbuf 中,但失败并不断告诉我:解释 JPEG 图像文件时出错(错误的 JPEG 库版本:库为 62,调用者期望为 80) try{ Gd
来自相机的照片包含缩略图和照片本身。缩略图由摄像头创建并用于快速浏览,而无需加载完整图像。 我想用 C 和 Gtk+ 2 来模仿这种行为。 exiftool 或 dcraw 等工具可以将缩略图提取到新
在我的程序中,我想使用本地硬盘驱动器上不存在的图像文件。 因此,我使用 xxd -i 生成了一个包含图像数据的 unsigned char[] 并将其嵌入到我的程序中。 但现在我无法从中加载 Gdk:
我正在用 ruby 创建一个图像幻灯片,使用 gtk pixbuf 加载图像。我是 ruby 和 GTK 的新手,这可能是一个愚蠢的问题。 目前图像更改链接到 GUI button_press
我正在尝试在窗口中显示图像。 我将 C++ 与 Gtkmm 和 Gdkmm 库一起使用。 我从磁盘读取图像并创建一个 Gdk::Pixbuf 然后我将它显示在一个小部件中。这是我在屏幕上看到的: 实际
我正在努力将二进制数据放入 gtk.gdk.pixbuf。 这应该能说明我的问题: file = open("image.jpg", "rb") //Ultimately this is going
我正在尝试嵌入一个只能在缓冲区中提供 bmp 图像的 chartdrawer 库。 我正在加载此图像,必须在新创建的 pixbuf 上显式调用 delete,然后调用垃圾收集器。 绘制方法每50ms调
我想在我的 TreeView 中显示一个包含一些图标的 ComboBox。所以我创建了一个 ListStore 来保存数据。 # Initialize a list store for the
我正在尝试使用 Python 和 Gdk 3 将文本添加到 Pixbuf。 我已经在网上搜索关于这个主题的信息几个小时了,看来我需要从 pixbuf 创建一个 cairo 上下文。不幸的是,我对开罗的
我想制作两点之间的电缆(线)的图像。我考虑用两点之间的距离制作电缆,然后将图像旋转两点之间的度数。 但我不知道如何从无到有创建图像。我的意思是,制作一个 5 像素宽、“x”长的图像,然后将其旋转“y”
我有一个文件 picture.jpg,我正在读它到内存 f = open('picture.jpg', 'rb') pic = f.read() f.close() 如何将 pic 转换为 gtk.g
环境:Python3 图书馆: from gi.repository import Gtk, Gdk import cairo 我想创建一个'pixbuf from file'但是这个方法在Gdk3中
我想让 TreeView 中的 gtk.CellRendererPixbuf 可以点击,这样我就可以在用户点击它时调用函数。这可能吗?如何实现? 我正在使用 PyGTK,但可以接受 C 或 PHP 或
我正在使用 Gtk+2 的应用程序,我需要实现一个文件树 View 。 实际代码是: public FileTree() { store = new TreeStore(2,typeof(st
我是一名优秀的程序员,十分优秀!