- 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/
我刚刚在我的 glass XE 20.1 上试用了更新后的 gdk,我的测试应用程序崩溃了,因为新的 api 不可用。 CardBuilder card = new CardBuilder(this,
我正在使用 Gdk::Pixbuf 在 C++ 中显示带有 Gdk::Cairo 的图像: virtual bool on_draw(const Cairo::RefPtr& cr) { Gl
我猜有人可能会觉得它微不足道,但我在这里问它是因为我找不到直接的答案。 让我们深入探讨这个问题: 拥有多个图像资源以及不断使用这些图像的 cairo 上下文。当然,我可以这样做: Glib::RefP
如何设置或更改 GdkPixbuf.Pixbuf 的颜色? 我可以创建和填充: pixbuf = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, Fals
在纯 GDK 3.10(无 GTK)项目中,如何刷新/清除/重绘 GdkWindow 的透明背景? 这个test.c在初始化(gdk_window_show())时以及当我图标化+取消图标化窗口时正确
在GDK中有一个名为GdkRectangle的对象用于绘制矩形。椭圆有类似的对象吗? 最佳答案 没有。实际上,GdkRectangle并不直接用于绘制矩形,它只是用于指定矩形位置。例如,gdk_dra
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
今天,我的 Glass 应用上的图片功能停止工作。昨天还好,但现在它卡在点击接受图片上。我认为这可能与它处理图片以及取景器的新方式(至少对我而言)有关。我在玻璃开发人员网站上可以找到的内容已被弃用且无
我发布了一张高频实时卡片,我希望在用户查看卡片时防止屏幕变暗。 我意识到这是一个重复的问题 GDK / APK for Google Glass - Keep screen from dimming
我有一个 gtk 程序,我在其中调用了一个 gdk 函数。我正在使用以下方法编译程序: gcc `pkg-config --cflags --libs gtk+-2.0 cairo glib-2.0
我想编写一个连续捕获屏幕并对图像进行一些修改的程序。可以在以下位置找到完整的测试程序: https://gist.github.com/blogsh/eb4dd4b96aca468c8bfa 但是,我
GDK 库的功能究竟是什么,Cairo 是如何适应的?它们是竞争技术还是互补技术?其中一个是否以任何方式依赖另一个? 最佳答案 TL;博士: 在最近的版本中,GDK 是 GTK+ 的平台抽象层。它还为
报告 Google Glass GDK 错误/功能请求的正确位置是什么?和Mirror API一样吗? 最佳答案 是的,该跟踪器同时用于 Mirror API 和 GDK 错误报告/功能请求。 关于g
我可以在 Glass 的 DCIM 目录中创建一个 JSON 文件,但当我在 Glass 上访问该文件时,该文件不可见。 这是代码: File jsonFile = new File(Environm
当我在 java 8 Stream 上使用 collect 方法时,Groovy 抛出一个奇怪的错误。这是我的代码: someStream.collect(Collectors.toList()) 这
如何将 System.Drawing.Bitmap 转换为 GDK# Image 以便我可以设置为图像小部件。 我试过这个... System.Drawing.Bitmap b = new Bitma
使用 GTK+ 3.6 我想显示内存缓冲区中的图像,而不是磁盘上的文件。我有一个包含图像数据的 const char *data,我正在尝试从中创建一个 GTK 图像。到目前为止,我已经尝试了两种我认
我正在尝试将 GDK 导入我的程序,但我仍然遇到错误 No module named GDK 你知道我该如何解决这个问题吗?因为在我尝试 import gtk.GDK 之前它已经工作了并导入GDK。
我正在尝试将 *.jpg 图像加载到 Gdk::Pixbuf 中,但失败并不断告诉我:解释 JPEG 图像文件时出错(错误的 JPEG 库版本:库为 62,调用者期望为 80) try{ Gd
在我的程序中,我想使用本地硬盘驱动器上不存在的图像文件。 因此,我使用 xxd -i 生成了一个包含图像数据的 unsigned char[] 并将其嵌入到我的程序中。 但现在我无法从中加载 Gdk:
我是一名优秀的程序员,十分优秀!