SDL читает пиксели из текстуры

Я хочу прочитать пиксели из текстуры, используя библиотеку SDL2. Я знаю, что невозможно напрямую прочитать пиксель из текстуры, но вы можете использовать следующую функцию:

int SDL_RenderReadPixels(SDL_Renderer*   renderer,
                     const SDL_Rect* rect,
                     Uint32          format,
                     void*           pixels,
                     int             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);
}

person Fede Otero    schedule 01.10.2013    source источник


Ответы (1)


Шаг, по-видимому, представляет собой длину строки сканирования в байтах. Итак, в зависимости от формата вашей текстуры: 1 * bytesPerPixel. (вероятно, 4 байта на пиксель). Прямоугольник должен быть чем-то вроде (x,y,x+1,y+1), а формат должен быть чем-то вроде SDL_PIXELFORMAT_RGBA8888 или эквивалентным для вашей конкретной текстуры. Возможно, вам придется инвертировать координату y в зависимости от того, использует ли SDL соглашение OpenGL (снизу вверх) или соглашение Windows (сверху вниз).

person Jean-Simon Brochu    schedule 01.10.2013