src/video/SDL_pixels.c
changeset 628 e561e8752d33
parent 297 f6ffac90895c
child 688 c0522010bb6d
equal deleted inserted replaced
627:8b9ac38381d0 628:e561e8752d33
   377 		 * that white is indeed reported as (255, 255, 255),
   377 		 * that white is indeed reported as (255, 255, 255),
   378 		 * and that opaque alpha is 255.
   378 		 * and that opaque alpha is 255.
   379 		 * This only works for RGB bit fields at least 4 bit
   379 		 * This only works for RGB bit fields at least 4 bit
   380 		 * wide, which is almost always the case.
   380 		 * wide, which is almost always the case.
   381 		 */
   381 		 */
   382 	        unsigned rv, gv, bv, av;
   382 	        unsigned v;
   383 		rv = (pixel & fmt->Rmask) >> fmt->Rshift;
   383 		v = (pixel & fmt->Rmask) >> fmt->Rshift;
   384 		*r = (rv << fmt->Rloss) + (rv >> (8 - fmt->Rloss));
   384 		*r = (v << fmt->Rloss) + (v >> (8 - fmt->Rloss));
   385 		gv = (pixel & fmt->Gmask) >> fmt->Gshift;
   385 		v = (pixel & fmt->Gmask) >> fmt->Gshift;
   386 		*g = (gv << fmt->Gloss) + (gv >> (8 - fmt->Gloss));
   386 		*g = (v << fmt->Gloss) + (v >> (8 - fmt->Gloss));
   387 		bv = (pixel & fmt->Bmask) >> fmt->Bshift;
   387 		v = (pixel & fmt->Bmask) >> fmt->Bshift;
   388 		*b = (bv << fmt->Bloss) + (bv >> (8 - fmt->Bloss));
   388 		*b = (v << fmt->Bloss) + (v >> (8 - fmt->Bloss));
   389 		if(fmt->Amask) {
   389 		if(fmt->Amask) {
   390 		        av = (pixel & fmt->Amask) >> fmt->Ashift;
   390 		        v = (pixel & fmt->Amask) >> fmt->Ashift;
   391 			*a = (av << fmt->Aloss) + (av >> (8 - fmt->Aloss));
   391 			*a = (v << fmt->Aloss) + (v >> (8 - fmt->Aloss));
   392 		} else
   392 		} else
   393 		        *a = SDL_ALPHA_OPAQUE;
   393 		        *a = SDL_ALPHA_OPAQUE;
   394 	} else {
   394 	} else {
   395 		*r = fmt->palette->colors[pixel].r;
   395 		*r = fmt->palette->colors[pixel].r;
   396 		*g = fmt->palette->colors[pixel].g;
   396 		*g = fmt->palette->colors[pixel].g;
   401 
   401 
   402 void SDL_GetRGB(Uint32 pixel, SDL_PixelFormat *fmt, Uint8 *r,Uint8 *g,Uint8 *b)
   402 void SDL_GetRGB(Uint32 pixel, SDL_PixelFormat *fmt, Uint8 *r,Uint8 *g,Uint8 *b)
   403 {
   403 {
   404 	if ( fmt->palette == NULL ) {
   404 	if ( fmt->palette == NULL ) {
   405 	        /* the note for SDL_GetRGBA above applies here too */
   405 	        /* the note for SDL_GetRGBA above applies here too */
   406 	        unsigned rv, gv, bv;
   406 	        unsigned v;
   407 		rv = (pixel & fmt->Rmask) >> fmt->Rshift;
   407 		v = (pixel & fmt->Rmask) >> fmt->Rshift;
   408 		*r = (rv << fmt->Rloss) + (rv >> (8 - fmt->Rloss));
   408 		*r = (v << fmt->Rloss) + (v >> (8 - fmt->Rloss));
   409 		gv = (pixel & fmt->Gmask) >> fmt->Gshift;
   409 		v = (pixel & fmt->Gmask) >> fmt->Gshift;
   410 		*g = (gv << fmt->Gloss) + (gv >> (8 - fmt->Gloss));
   410 		*g = (v << fmt->Gloss) + (v >> (8 - fmt->Gloss));
   411 		bv = (pixel & fmt->Bmask) >> fmt->Bshift;
   411 		v = (pixel & fmt->Bmask) >> fmt->Bshift;
   412 		*b = (bv << fmt->Bloss) + (bv >> (8 - fmt->Bloss));
   412 		*b = (v << fmt->Bloss) + (v >> (8 - fmt->Bloss));
   413 	} else {
   413 	} else {
   414 		*r = fmt->palette->colors[pixel].r;
   414 		*r = fmt->palette->colors[pixel].r;
   415 		*g = fmt->palette->colors[pixel].g;
   415 		*g = fmt->palette->colors[pixel].g;
   416 		*b = fmt->palette->colors[pixel].b;
   416 		*b = fmt->palette->colors[pixel].b;
   417 	}
   417 	}