我可以获得第一个像素,但如何获得其他像素?
def get_alpha (x:uint8,y:uint8): uchar
r:uchar
g:uchar
b:uchar
a:uchar
dire:uint32*
r=0
g=0
b=0
a=0
Image.do_lock()
dire=Image.pixels
Image.format.get_rgba (*dire, ref r,ref g,ref b,ref a)
Image.unlock()
print "En x= %d y=%d ,%d %d %d %d",x,y,r,g,b,a
return a
这是获取像素的 SDL Wiki 的 c 代码。我只需要(3和4个字节)。我看到我可以做 surface.pixels+y *surface.pitch*surface.format.BytesPerPixel 去这个位置,但我有这个问题。第一个位置很好,但全白表面的最后一个位置给了我其他颜色。我认为我的措施并不好。
// Nota, código obtenido del wiki de SDL
// http://www.libsdl.org/cgi/docwiki.cgi/Pixel_20Access
Uint32 getpixel(SDL_Surface *surface, int x, int y)
{
int bpp = surface->format->BytesPerPixel;
/* Here p is the address to the pixel we want to retrieve */
Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * bpp;
switch(bpp) {
case 1:
return *p;
case 2:
return *(Uint16 *)p;
case 3:
if(SDL_BYTEORDER == SDL_BIG_ENDIAN)
return p[0] << 16 | p[1] << 8 | p[2];
else
return p[0] | p[1] << 8 | p[2] << 16;
case 4:
return *(Uint32 *)p;
default:
return 0; /* shouldn't happen, but avoids warnings */
}
}