Попытка удвоить размер SDL_Surface ужасно терпит неудачу - PullRequest
2 голосов
/ 16 августа 2011

источник всегда 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));
        }
    }
}

Вывод выглядит так: (обязательно для просмотра в полном размере).По сути, каждый второй пиксель отсутствует.Я перепробовал всевозможные возможности, и я не могу найти, где я ошибаюсь.

GetPixel и SetPixel просто устанавливают / получают цвет поверхности, учитывая X и Y [и цвет].

1 Ответ

3 голосов
/ 16 августа 2011

Использование:

        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 раза за каждый раунд.

...