更改 Gtk.Image 的各个像素
本文关键字:像素 Gtk Image 更改 | 更新日期: 2023-09-27 18:15:15
我正在尝试在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 总是为空?
图像本身正确加载和显示。
虽然我之前没有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
API 在较新版本的 Gtk 中被弃用,但请注意,在 GTK# 的情况下可能还没有。
因此,改用Gdk.Pixbuf
可能是个好主意。可以获取GdkPixbuf
像素并在 GTK 中修改相同的像素。但不幸的是,在 GTK# 的情况下,Gdk.Pixbuf
的特定属性(像素(似乎是只读的。一种选择可能是使用从图像创建的Gdk.Pixbuf
中的Gdk.Pixdata
,使用Gdk.Pixdata
中的方法修改像素,从中创建Gdk.Pixbuf
并将其复制回原始Gdk.Pixbuf
。不幸的是,我不能确定这一点,你可以试一试。
或者,您可以考虑绘制Gdk.Drawable
。有一些示例可用,其中与Gtk.Widget
(通常Gtk.DrawingArea
(相关的Gdk.Drawable
在Expose Event
回调中更新。
我希望所提供的信息可以为您提供一些继续的指示。
首先使用Pixbuf
:
Gdk.Pixbuf pixbufImage = new Gdk.Pixbuf(@"images/test.png");
Gtk.Image gtkImage = new Gtk.Image(pixbufImage);
Gdk.Image gdkImage = gtkImage.ImageProp;