我正在尝试在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总是为空?
图像本身正确加载和显示。
答案 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.Drawable
与Gtk.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;