尝试将 SDL_Surface 的大小加倍严重失败

发布于 2024-11-29 12:56:23 字数 664 浏览 1 评论 0原文

源始终为 320x240,目标始终为 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[和颜色]的情况下设置/接收表面的颜色。

source is always 320x240, dest is always 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));
        }
    }
}

The output looks like this: (be sure to view at full size). Essentially, every second pixel is missing. I've tried all sorts of possibilities and I can't find where I'm going wrong.

GetPixeland SetPixel simply set/recieve a surface's colour, given an X and Y [and color].

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

心如狂蝶 2024-12-06 12:56:23

使用:

        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(source, x, y) 的返回值,因此您不需要每轮调用它 4 次。

Use:

        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));

Instead of:

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

And for speed up: Store return value of GetPixel(source, x, y), so you don't need to call it 4 times per each round.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文