从 DBus client/server 保存 GdkPixbuf 导致不同的文件
Saving a GdkPixbuf from a DBus client/server result in different files
我有一个 DBus 服务,它为一个 Pixbuf 文件创建一个 Variant 类型,尽管数据相同,但当保存在任一侧时,它会给出两个不同的文件。从服务器端保存的图像是正确的,客户端显示顶部 1/3 正确,中间 1/3 水平移动 1/3 宽度并且颜色不稳定,底部 1/3 移动宽度的 2/3 并具有不同的不稳定颜色。
服务器端的Variant就这样创建了
var image_var = new Variant ("(iiibi^ay)",
width,
height,
stride,
has_alpha,
bits_per_sample,
data);
并由客户端使用
解压
Variant data_var = null;
image.get ("(iiibi@ay)",
&width,
&height,
&stride,
&has_alpha,
&bits_per_sample,
&data_var);
我在两面都打印了有关 pixbuf 的信息,包括校验和。服务器端给出
Width: 1024
Height: 768
Stride: 3072
Bits/Sample: 8
Has Alpha: false
Data Length: 786432
Data Checksum: e1facf66095e46d7ca3338b6438c1939
和客户
Width: 1024
Height: 768
Stride: 3072
Bits/Sample: 8
Has Alpha: false
Data Length: 786432
Data Checksum: e1facf66095e46d7ca3338b6438c1939
肯定是一样的,两者保存图片的调用是
pixbuf.save (filename, "jpeg", "quality", "100", null);
这已经过测试,并且已经在三台不同的计算机上验证了不稳定。我将提供一个完整的示例,可能在明天。我只是想在没有它的情况下先把它放在那里,以防有人以前遇到过它。
在 D-Bus 消息中发送像图像这样的大数据 blob 并不是 D-Bus 的设计目的 - 它旨在用于控制消息,而不是大数据消息。你会得到糟糕的性能,并且可能会达到较大图像的 D-Bus 消息大小限制。有关示例,请参阅 Passing a large data structure over dbus。
相反,您应该发送图像数据的句柄。 D-Bus 以 file descriptor type(类型字符串 h
)的形式为此提供了功能,它允许您将图像数据的文件描述符从一个进程传递到另一个进程。例如,文件描述符可以是未命名的管道,也可以是打开的只读文件。
我有一个 DBus 服务,它为一个 Pixbuf 文件创建一个 Variant 类型,尽管数据相同,但当保存在任一侧时,它会给出两个不同的文件。从服务器端保存的图像是正确的,客户端显示顶部 1/3 正确,中间 1/3 水平移动 1/3 宽度并且颜色不稳定,底部 1/3 移动宽度的 2/3 并具有不同的不稳定颜色。
服务器端的Variant就这样创建了
var image_var = new Variant ("(iiibi^ay)",
width,
height,
stride,
has_alpha,
bits_per_sample,
data);
并由客户端使用
解压Variant data_var = null;
image.get ("(iiibi@ay)",
&width,
&height,
&stride,
&has_alpha,
&bits_per_sample,
&data_var);
我在两面都打印了有关 pixbuf 的信息,包括校验和。服务器端给出
Width: 1024
Height: 768
Stride: 3072
Bits/Sample: 8
Has Alpha: false
Data Length: 786432
Data Checksum: e1facf66095e46d7ca3338b6438c1939
和客户
Width: 1024
Height: 768
Stride: 3072
Bits/Sample: 8
Has Alpha: false
Data Length: 786432
Data Checksum: e1facf66095e46d7ca3338b6438c1939
肯定是一样的,两者保存图片的调用是
pixbuf.save (filename, "jpeg", "quality", "100", null);
这已经过测试,并且已经在三台不同的计算机上验证了不稳定。我将提供一个完整的示例,可能在明天。我只是想在没有它的情况下先把它放在那里,以防有人以前遇到过它。
在 D-Bus 消息中发送像图像这样的大数据 blob 并不是 D-Bus 的设计目的 - 它旨在用于控制消息,而不是大数据消息。你会得到糟糕的性能,并且可能会达到较大图像的 D-Bus 消息大小限制。有关示例,请参阅 Passing a large data structure over dbus。
相反,您应该发送图像数据的句柄。 D-Bus 以 file descriptor type(类型字符串 h
)的形式为此提供了功能,它允许您将图像数据的文件描述符从一个进程传递到另一个进程。例如,文件描述符可以是未命名的管道,也可以是打开的只读文件。