Я хочу читать пиксели из текстуры, используя библиотеку SDL2.
Я знаю, что невозможно напрямую прочитать пиксель из текстуры, но вы можете использовать следующую функцию:
int SDL_RenderReadPixels(SDL_Renderer* renderer,
const SDL_Rect* rect,
Uint32 format,
void* pixels,
int pitch)
По сути, в моем приложении я хочу прочитать один пиксель на экране окна и определить, является ли он прозрачным или нет.
Как я могу использовать эту функцию?
Что такое атрибут pitch, как я определяю SDL_Rect и как получить пиксель в правильном формате?
Я обнаружил событие щелчка левой кнопкой мыши и передал координаты x и y методу, как вы можете видеть:
void detectElementOnXandY(SDL_Renderer* renderer, int x, int y){
// x represents the coordinate x.
// y represents the coordinate y.
// Here i have to call the function
int result = SDL_RenderReadPixels(renderer, rect, format, pixels, pitch);
}
Кажется, что шагом является длина строки сканирования в байтах. Итак, в зависимости от формата вашей текстуры: 1 * bytesPerPixel. (вероятно 4 байта на пиксель)
Прямоугольник должен быть чем-то вроде (x, y, x + 1, y + 1)
и формат должен быть что-то вроде SDL_PIXELFORMAT_RGBA8888 или эквивалент для вашей конкретной текстуры.
Возможно, вам придется инвертировать координату y в зависимости от того, использует ли SDL соглашение OpenGL (снизу вверх) или соглашение Windows (сверху вниз).
Других решений пока нет …