尝试加倍SDL_Surface的大小失败

时间:2011-08-16 10:18:36

标签: c resize sdl interpolation

源始终为320x240,dest始终为640x480。

void DoDoubleScaling(SDL_Surface* dest, SDL_Surface* source)
{
    assert(dest->w == source->w*2);
    assert(dest->h == source->h*2);
    for (int y = 0; y < source->h; ++y)
    {
        for (int x = 0; x < source->w; ++x)
        {
            SetPixel(dest, x*2, y*2, GetPixel(source, x, y));
            SetPixel(dest, x*2+1, y*2+1, GetPixel(source, x, y));
        }
    }
}

输出如下所示:(确保以完整大小查看)。基本上,每隔一个像素就丢失了。我已经尝试了各种各样的可能性,但我无法找到我出错的地方。

GetPixelSetPixel只需设置/接收曲面的颜色,给定X和Y [和颜色]。

1 个答案:

答案 0 :(得分:3)

使用:

        SetPixel(dest, x*2, y*2, GetPixel(source, x, y));
        SetPixel(dest, x*2, y*2+1, GetPixel(source, x, y));
        SetPixel(dest, x*2+1, y*2, GetPixel(source, x, y));
        SetPixel(dest, x*2+1, y*2+1, GetPixel(source, x, y));

而不是:

        SetPixel(dest, x*2, y*2, GetPixel(source, x, y));
        SetPixel(dest, x*2+1, y*2+1, GetPixel(source, x, y));

为了加快速度:存储GetPixel的返回值(源,x,y),因此每轮不需要调用4次。