请帮助这个初学者的程序来获取 gdk 屏幕属性。我有一个小型 C++ 程序来查找连接的显示单元。我在 Linux Debian 上使用 C++。gdk_screen_get_default()不返回Screen对象。如果我不检查屏幕对象,则会出现以下错误。
错误 (进程:8023):Gdk-CRITICAL **:gdk_screen_get_monitor_geometry:断言“GDK_IS_SCREEN(屏幕)”失败
我浏览了相关帖子并参考了以下代码片段。
感谢您的帮助。任何解决此问题的指针/指南都会有所帮助。
我连接了一台显示器,显示设置为
$ echo $XDG_CURRENT_DESKTOP
GNOME
$ echo $DISPLAY
:0
Run Code Online (Sandbox Code Playgroud)
代码
#include <gdk/gdk.h>
#include <iostream>
/*
GTK version 3.14.5
g++ getScreenInfo.cpp -o getScreenInfo `pkg-config gtk+-3.0 --cflags --libs`
*/
int main()
{
GdkScreen *screen;
screen = gdk_screen_get_default();
int num_monitors;
int i;
if (screen)
{
num_monitors = gdk_screen_get_n_monitors(screen);
for (i = 0; i < num_monitors; i++)
{
GdkRectangle rect;
gdk_screen_get_monitor_geometry (screen, i, &rect); …Run Code Online (Sandbox Code Playgroud) 问题很简单,我有一个生成像素缓冲区的代码。现在我需要呈现这个像素缓冲区,而不是保存图像然后分析它。
解决方案是什么:
到目前为止的建议是:要使用 opengl,为覆盖窗口的矩形创建一个顶点缓冲区,并使用像素着色器来绘制像素。这显然不是在窗口中交换像素缓冲区的最佳方法。
平台:Ubuntu 18
请查看本页底部的示例:http: //www.pygtk.org/pygtk2tutorial/sec-EventHandling.html 它说:
57 def button_press_event(widget, event):
58 if event.button == 1 and pixmap != None:
59 draw_brush(widget, event.x, event.y)
60 return True
Run Code Online (Sandbox Code Playgroud)
那么,对于什么是"返回真实"?
我正在使用GAppInfo / GDesktopAppInfo。
GIcon *icon = gtk_app_info_get_icon (G_APP_INFO(appinfo));
现在,我需要将其放在GtkIconView上,但是我发现无法通过GIcon创建GdkPixbuf。有人知道吗?非常感谢!
编辑1:实际上是GThemedIcon。
我正在努力将二进制数据变成一个gtk.gdk.pixbuf.
这应该说明我的问题:
file = open("image.jpg", "rb")
//Ultimately this is going to come from a BLOB
binary = f.read()
//I created a pixbuf directly from the jpg
//and took the rowstride values &c. from that
pixbuf = gtk.gdk.pixbuf_new_from_data(
binary, gtk.gdk.COLORSPACE_RGB, False, 8 , 450, 640, 1352)
Run Code Online (Sandbox Code Playgroud)
这失败了:
ValueError: data length (90825) is less then required by the other parameters (865280)
我目前的解决方法是将二进制数据写入文件,然后Pixbuf从该文件创建.这只是感觉很hacky.我正在从数据库中读取二进制数据,所以我真的需要一个可以直接从缓冲区创建pixbuf的解决方案.
我不明白为什么如果我只是BLOB从数据库中读取并将其写入文件 - 然后将文件作为pixbuf加载,这很容易,但更难直接从缓冲区!
我究竟做错了什么?
我想要做的是在C中打开几个图像,然后创建一个由GtkImages组成的表,可以将实际图像设置或重置为其中一个初始图像(我正在尝试创建一个棋盘).我尝试用GTK做这个,但我不能多次使用图像,因为它是一个小部件.我尝试使用GDK,但根据文档,所有(与图像相关的)GDK功能都已弃用.
宽度应如下所示:
window <- table <- a1 a2 a3 ... a8 a1 - h8 are GtkImages.
b1 b2 b3 ... b8
c1 c2 c3 ... c8
...
h1 h2 h3 ... h8
Run Code Online (Sandbox Code Playgroud)
有没有人有任何想法?我对在GTK中打开/使用图像/像素图感到困惑.我也在使用Ubuntu.非常感谢所有答案.
我很难理解这个if语句是如何工作的:
if (keyval == GDK_PLUS &&
(event->state & ~consumed & ALL_ACCELS_MASK) == GDK_CONTROL_MASK)
Run Code Online (Sandbox Code Playgroud)
完整示例代码:
#define ALL_ACCELS_MASK (GDK_CONTROL_MASK | GDK_SHIFT_MASK | GDK_MOD1_MASK)
gdk_keymap_translate_keyboard_state (keymap, event->hardware_keycode,
event->state, event->group,
&keyval, NULL, NULL, &consumed);
if (keyval == GDK_PLUS &&
(event->state & ~consumed & ALL_ACCELS_MASK) == GDK_CONTROL_MASK)
// Control was pressed
Run Code Online (Sandbox Code Playgroud)
我的目标是理解它,所以我可以将它移植到Vala,因为Valadocs中给出的示例与C中的相同,而不是Vala.