最初のピクセルを取得できますが、他のピクセルを取得するにはどうすればよいですか?
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 */
}
}