在 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
现在我们可以使用ImageMagick的display
程序来显示它:
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
<小时/>
现在您需要做的就是找到一个小的 Python 或 Tcl/Tk 库来绘制一些旋钮和转盘,读取它们的位置并相应地更改图像并告诉屏幕重新绘制。
关于c - 在linux中显示来自C的gif gif87a图像的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48304080/