Image 旋转后的Pixmap插值(Xlib)

Image 旋转后的Pixmap插值(Xlib),image,image-processing,x11,interpolation,xlib,Image,Image Processing,X11,Interpolation,Xlib,我必须写一个Xt小部件,它显示一个可以旋转到不同位置的鼓 我有一个鼓的Pixmap,我用下面的代码用简单的三角函数旋转它 #define CONST 180/M_PI for (y=1; y < attrib.height; y++) { for (x=1; x < attrib.width; x++) { int xx, yy; int xr, yr;

我必须写一个Xt小部件,它显示一个可以旋转到不同位置的鼓

我有一个鼓的Pixmap,我用下面的代码用简单的三角函数旋转它

#define CONST 180/M_PI

    for (y=1; y < attrib.height; y++) {
            for (x=1; x < attrib.width; x++) {
                    int xx, yy;
                    int xr, yr;
                    int xs, ys;
                    xx = x-attrib.width/2;
                    yy = y-attrib.height/2;
                    xr = round((xx*cos((double)deg/CONST) + yy *sin((double)deg/CONST));
                    yr = round((double)xx * -sin((double)deg/CONST)+  (double)yy * cos((double)deg/CONST));
                    xs = xr + attrib.height/2; 
                    ys = yr + attrib.width/2;
                    XPutPixel(dest, x, y, XGetPixel(src, xs, ys));

            }
    }
旋转工作正常,但最终的像素贴图有点混叠。你能推荐一种插值图像的方法吗


谢谢您的帮助,我的英语很差,很抱歉。

您需要创建一个缓冲区,并在缓冲区中处理您的图像。您可以使用三个剪切旋转方法google和/或超级采样google。对于X11特定的部分,一次调用一个XPutPixel和一个XGetPixel是使程序运行s…..l…..o…..w…..l…..y的好方法。学习如何一次读写整个图片。我按照你的提示做了,结果很好。我使用了双线性插值。不幸的是,它非常慢,每次旋转10秒。我去掉了XPutPixel和XGetPixel,但是我找不到一种方法来加速彩色单元格的分配。对于每个计算出的像素,将生成的RGB放入一个XColor中,并在其上使用XAllocColor。有没有办法避免这么多电话?我注意到,如果我删除XAllocColor,计算速度会非常快,不到半秒,但结果当然无法显示。对于每个计算的像素,将生成的RGB放入XColor并使用XAllocColor。不您可以使用XCreateImage、XDestroyImage创建/销毁映像。您可以直接作为数组元素访问它的像素,您必须准备好使用不同的图像格式和XGetImage、xUtiImage来获取/放置整个图像。大多数X11图像处理程序都在这样做。查看xloadimage源代码,了解它是如何完成的。当然,您可以使用现有的图像处理库来完成这项工作。谢谢您的帮助。我想我成功了。主要的问题是,对于每个像素,我必须称之为XAllocColor。现在,假设是真彩色视觉,我使用了一个宏,可以自动从RGB转换为彩色单元格。现在轮换时间是不明显的。