【问题标题】:Changing the individual pixels of a Gtk.Image更改 Gtk.Image 的单个像素
【发布时间】:2011-11-21 16:33:12
【问题描述】:

我正在尝试在 Gtk.Image 小部件上设置单个像素。该文档指出 Gtk.Image 的 ImageProp 属性返回一个 Gdk.Image 似乎可以让您编辑单个像素,但每当我使用它时它只返回 null。

到目前为止,我的解决方案是将图像从磁盘加载为 System.Drawing.Bitmap,对其进行编辑,将其保存到临时文件,然后将其加载回 Gtk.Image,但这显然并不理想。

对于

Gtk.Image image = new Gtk.Image("images/test.png");
Gdk.Image gdkImage = image.ImageProp;

为什么gdkImage总是为空?

图像本身可以正确加载和显示。

【问题讨论】:

    标签: c# gtk gtk#


    【解决方案1】:

    虽然我之前没有使用 GTK# 或 C# 的经验,但根据我对 Gtk 的了解以及我可以在网上查找的内容,我会尝试提供一些输入。
    仅当您使用上述属性从Gdk.Image 创建了Gtk.Image 时,您才能为Gtk.Image 获得Gdk.Image,否则您将获得null,就像您从文件创建它的情况一样,或者正如从Gdk.Pixbuf 创建它所建议的那样。在当前情况下,您可以尝试使用Gdk.Drawable.GetImage 方法或使用Gdk.Image.Get 方法从Gdk.Drawable 获取Gdk.Image。在上述情况下,您可以将与Gtk.Image 关联的GdkWindow 用作Gdk.Drawable。要使Gdk.Window 有效,小部件应该已显示或实现。但在这两种情况下,您很有可能都以 null 结尾。
    旁注:GdkImage APIs are deprecated in the newer versions of Gtk,请注意可能在 GTK# 的情况下还不是这样。
    因此,改用Gdk.Pixbuf 可能是个好主意。可以获取GdkPixbuf 的像素并在 GTK 中对其进行修改。但不幸的是,在 GTK# 的情况下,that particular property (Pixels)Gdk.Pixbuf 似乎是只读的。一种选择可能是使用从图像创建的Gdk.Pixbuf 中的Gdk.Pixdata,使用Gdk.Pixdata 中的方法修改像素,从中创建Gdk.Pixbuf 并将其复制回原始Gdk.Pixbuf。不幸的是,我不能确定这一点,不过你可以试一试。
    或者,您可以考虑在Gdk.Drawable 上绘图。有一些可用的示例,其中与Gtk.Widget(通常为Gtk.DrawingArea)关联的Gdk.DrawableExpose Event 回调中更新。
    我希望提供的信息可以为您提供一些指导。

    【讨论】:

    • 在这一点上,我觉得这比它的价值更麻烦。对于将来看到这个的任何人,我建议从绘制到 Gdk.Drawable 开始,因为所有其他建议似乎都无法使用(Gdk.Drawable 需要 Gdk.Drawable 来创建自己,pixbuf.RenderToDrawable 需要一个 Drawable 和一个 Gdk.GC(不管是什么)等等。这些对象中的一堆只有采用 IntPtrs 的构造函数,这似乎不是很有帮助。不仅如此,GtkSharp 在其 DLL 中没有文档)谢谢不过,非常感谢您的努力。
    【解决方案2】:

    首先使用Pixbuf

    Gdk.Pixbuf pixbufImage = new Gdk.Pixbuf(@"images/test.png");
    Gtk.Image gtkImage = new Gtk.Image(pixbufImage);
    Gdk.Image gdkImage = gtkImage.ImageProp;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-21
      • 1970-01-01
      • 2016-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多