c - 在linux中显示来自C的gif gif87a图像的最佳方法

标签 c image x11 gif

在 Linux 中,使用 gnu C 而不是 C++,在屏幕上显示 gif87a 文件并在屏幕上的同一位置重新显示它,以便用户可以观察即时所做的更改,最好的方法是什么?数据集?这不是 gif 动画。

在一些旧代码(fortran77)中,有一个 C 包装器,它获取屏幕上显示的图像并将其写入 gif 文件,有一条关于 X Window Applications Programming, Ed. 2, Johnson & Reichard 的评论。引用编写了将图像数据显示到屏幕上的C代码并编写了gif87a文件,该代码是在1995年左右编写的,图像的屏幕显示不再起作用(只是一个黑色的窗口)而是创建gif 文件的功能仍然有效。我想要做的是使用 SLES 版本 11.4 中的现有 C 代码,以及可用于打开 gif 文件并将其显示在屏幕上的库。图像或等高线图有一个颜色条,用户可以设置最小/最大值以根据自己的喜好显示图像,并且最好让用户能够轻松高效地调整这些最小最大值重新绘制图像(重写 gif,然后重新显示在屏幕上的同一位置)。用户还可以转动一些其他旋钮,例如数据窗口(hamming 或 han),如果用户在确定之前可以快速/轻松地运行大约 5 种以上查看图像的方式,那就最好了然后使用在 powerpoint、excel 等中创建的最终 gif 被认为是正确的。

最佳答案

编写 X11 应用程序并非易事。您可以使用 ImageMagick 显示 GIF(或大约 200 种图像格式中的任何一种),它包含在大多数 Linux 发行版中,并且可用于 macOS。 Windows 不算在内。

因此,您可以从命令行创建图像并操作图像,如果需要,也可以使用 C 语言。因此,让我们创建一个 1024x768 且充满随机颜色的 GIF:

convert -size 1024x768 xc:blue +noise random -pointsize 72 -gravity center -annotate 0 "10" image.gif

enter image description here

现在我们可以使用ImageMagickdisplay程序来显示它:

display image.gif &

现在我们可以通过以下方式获取其 X11 “window-id”:

xprop -root

...
_NET_ACTIVE_WINDOW(WINDOW): window id # 0x600011
...
...

现在您可以根据需要使用滤镜、模糊、形态、阈值和卷积来更改图像:

convert image.gif -threshold 80% -morphology erode diamond -blur 0x3 -convolve "3x3: -1,0,1, -2,0,2, -1,0,1" ... image.gif

然后告诉display程序重绘窗口:

display -window 0x600011 image.gif
<小时/>

这里有一个小脚本,它生成每帧中间带有新数字的图像并更新屏幕:

for ((t=0;t<100;t++)) ; do 
   convert -size 640x480 xc:blue +noise random -pointsize 72 -fill white -gravity center -annotate 0 "$t" image.gif
   display -window 0x600011 image.gif
done

enter image description here

<小时/>

现在您需要做的就是找到一个小的 Python 或 Tcl/Tk 库来绘制一些旋钮和转盘,读取它们的位置并相应地更改图像并告诉屏幕重新绘制。

关于c - 在linux中显示来自C的gif gif87a图像的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48304080/

相关文章:

c - GUI系统实现

C - 'malloc' 似乎无法正常工作

c - 在 c 中打印 wav header

从 c 调用 fortran 77 进行 arpack

java - 在 Java 中通过套接字发送图像的有效方法

c# - RGB 到 HSV 的转换导致图像嘈杂

创建计算百分比的 C 程序给我一个问题

ios - 图片不会在Tab Bar Item iOS 9上呈现

c++ - X11 键按下导致键按下和释放

c++ - 如何从原始数据 C++ 在 X11 中创建游标