2013-10-01 44 views
-1

我想使用SDL2库从纹理读取像素。 我知道这是不可能直接从纹理读出的像素,但是你可以使用下面的功能:SDL从纹理读取像素

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

的间距似乎是在字节的扫描线的长度。因此取决于纹理的格式:1 * bytesPerPixel。 (可能每个像素4字节) 矩形应该是像(x,y,x + 1,y + 1) ,格式应该是类似SDL_PIXELFORMAT_RGBA8888或您的特定纹理的等效物。 如果SDL使用OpenGL(从下到上)约定或Windows(从上到下)约定,则可能需要反转y坐标。