Я пытаюсь сделать простой просмотрщик изображений. Я в основном загружаю изображение в поверхность, а затем создаю из него текстуру.SDL2 испорченное изображение с манипуляцией пикселями и SDL_UpdateTexture()
В конце, я делаю обычный SDL_RenderClear()
, SDL_RenderCopy()
и SDL_RenderPresent()
согласно migration guide.
Это работает отлично, за исключением того, что, если я позвоню SDL_UpdateTexture()
до 3 делают вызовы выше, я получаю перепутались изображение:
Я зову SDL_UpdateTexture(), как это:
SDL_UpdateTexture(texture, NULL, image->pixels, image->pitch)
Где image
- это поверхность, которую я загрузил для изображения, и texture
- это текстура, которую я создал из этого. Попытки изменить высоту тона приведут к по-разному испорченным изображениям. Я также попытался использовать rect для второго параметра, но результаты одинаковы, если прямоугольник имеет те же размеры, что и изображение. Если размеры больше (например, такие же, как у окна), обновление не происходит, но ошибок нет.
Доступен full code.
Я хотел бы манипулировать пикселями поверхности непосредственно через image->pixels
, а затем позвонить SDL_UpdateTexture()
, но просто позвонить SDL_UpdateTexture()
без каких-либо вмешательств достаточно, чтобы портить вещи.
Спасибо за ваш ответ. Это происходит на memcpy, но работает, если вы замените image-> pitch только тональным сигналом. Я прокомментировал строку colorKey до конца цикла for, так как formattedSurf нигде не определен. Кажется, я не могу использовать пиксели без сбоев программы. – Gigi
@Gigi жаль, что я сделал пару ошибок, поскольку я адаптировал свой код, чтобы он соответствовал вашим, так что пропустили пару имен переменных. Не могли бы вы снова попробовать полный код (включая memcopy). Я думаю, что это, возможно, было испорчено, не преобразовывая формат поверхности перед созданием текстуры, поэтому я добавил это. – Zammalad
Вы пропустили декларацию текстуры, а также опечатали в imageFormatted (отсутствует «r») - поэтому SDL_FreeSurface (imageFormatted) несовместим. После их исправления, я все еще получаю сбои на memcpy. Можете ли вы попробовать протестировать код, прежде чем публиковать его? – Gigi