更改Gtk.Image的各个像素

时间:2011-11-21 16:33:13

标签: c# gtk gtk#

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

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

有关

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

为什么gdkImage总是为空?

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

2 个答案:

答案 0 :(得分:1)

虽然我之前没有GTK#或C#的经验,但基于我对Gtk& amp;我可以在网上查看,我会尝试提供一些输入 只有当您使用上述属性从Gdk.Image创建了Gtk.Image时,您才能获得Gtk.Image Gdk.Image,否则您将获得null。您是从文件创建它还是从Gdk.Pixbuf创建它的建议的情况。在目前的情况下,您可以尝试使用Gdk.Image方法从Gdk.Drawable获取Gdk.Drawable.GetImage或使用Gdk.Image.Get方法。在上述案例中,您可以使用与GdkWindow关联的Gtk.Image作为Gdk.Drawable。要使Gdk.Window有效,应该显示或实现窗口小部件。但在这两种情况下,您很可能以null结尾 附注:GdkImage APIs are deprecated in the newer versions of Gtk,请注意可能在GTK#的情况下不是这样。
因此,使用Gdk.Pixbuf代替可能是个好主意。可以获取GdkPixbuf的像素并在GTK中修改相同的像素。但不幸的是,在GTK的情况下,Gdk.Pixbuf的{​​that particular property (Pixels)被认为是只读的。一种选择可能是使用Gdk.Pixbuf中的Gdk.Pixdata来自图片创建的{{3}},使用Gdk.Pixdata中的方法修改像素,从中创建Gdk.Pixbuf&将其复制回原始Gdk.Pixbuf。不幸的是我无法确定这一点,你可以试一试。
或者,您可以考虑绘制到Gdk.Drawable。有一些示例可用Gdk.DrawableGtk.Widget相关联的Gtk.DrawingArea(通常为Expose Event)在{{1}}回调中更新。
我希望所提供的信息可以为您提供一些指导。

答案 1 :(得分:0)

首先使用Pixbuf

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