从 DBus 客户端/服务器保存 GdkPixbuf 会导致不同的文件



>我有一个DBus服务,它为Pixbuf文件创建一个Variant Type类型,当保存在两侧时,尽管数据相同,但它会给出两个不同的文件。从服务器端保存的图像是正确的,客户端的图像显示顶部 1/3 正确,中间 1/3 水平移动宽度的 1/3 并且颜色不稳定,底部 1/3 移动宽度 2/3 并且具有不同的不稳定颜色。

服务器端的变体是这样创建的

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);

这已经过测试,并在三台不同的计算机上验证了不稳定性。我将提供一个完整的示例,可能明天。我只是想先把它放在那里,以防万一以前有人遇到过这个。

发送大型数据blob(如D-Bus消息中的图像)不是D-Bus的设计目的 - 它用于控制消息,而不是大型数据消息。性能会很差,并且可能会达到较大图像的 D-Bus 消息大小限制。有关示例,请参阅通过 dbus 传递大型数据结构。

相反,您应该发送图像数据的句柄。D-Bus 以文件描述符类型(字符串h类型)的形式为此提供了功能,它允许您将图像数据的文件描述符从一个进程传递到另一个进程。例如,文件描述符可以是未命名的管道,也可以是打开的只读文件。

相关内容

  • 没有找到相关文章

最新更新