使用Xlib放大图像

时间:2011-07-24 16:40:13

标签: c zoom xlib

我有一个我要放大的ximage,并显示。我现在正采取天真的方法:

allocate bigger image
use nearest-neighbor interpolation to fill it in.
put the whole image on a pixmap.

哪个有效,但是很慢,并且一旦我接近更大的缩放级别(例如800%)就会爬行。然而,gimp可以放大到3200%,仍然感觉很快。这里采取的方法是什么?我应该一次只填一个屏幕吗?但那么滚动怎么样:不会执行插值,XPutImage和XCopyArea每次都会暴露杀戮性能?

2 个答案:

答案 0 :(得分:1)

我不是Xlib的专家,但在我看来,一个好方法是只绘制缩放部分,而不是计算整个图像的插值。

对于滚动,如果您正在寻找表演,您可以复制在新位置仍然可见的旧变焦部分,并计算“已发现”像素的插值。例如,向下滚动时,您可以复制上一个图像的底部并将其粘贴到更高的位置,然后在底部计算/绘制新的可见内容。

答案 1 :(得分:1)

大多数现代X11应用程序都不直接使用Xlib,如果有的话。我的猜测是,Gimp将缩放的图像渲染成缓冲区并将其绘制到窗口,而不是使用XImage中的图像。