Date: Tue, 12 Aug 2003 14:26:19 +0200 (MEST)
From: "Mattias Engdeg?rd" Subject: bug in SDL_GetRGB/GetRGBA There's an embarrassing bug in GetRGB/GetRGBA which apparently has been there for years. It incorrectly converts colours with < 8 bits/channel. It came to my attention today in #sdl. What it does now is (for each channel): rv = (pixel & fmt->Rmask) >> fmt->Rshift; *r = (rv << fmt->Rloss) + (rv >> (8 - fmt->Rloss)); which is wrong; the last line should be *r = (rv << fmt->Rloss) + (rv >> (8 - (fmt->Rloss << 1))); --HG-- extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%40689
This commit is contained in:
parent
05e09aeff0
commit
d8ae01f168
1 changed files with 7 additions and 7 deletions
|
@ -381,14 +381,14 @@ void SDL_GetRGBA(Uint32 pixel, SDL_PixelFormat *fmt,
|
|||
*/
|
||||
unsigned v;
|
||||
v = (pixel & fmt->Rmask) >> fmt->Rshift;
|
||||
*r = (v << fmt->Rloss) + (v >> (8 - fmt->Rloss));
|
||||
*r = (v << fmt->Rloss) + (v >> (8 - (fmt->Rloss << 1)));
|
||||
v = (pixel & fmt->Gmask) >> fmt->Gshift;
|
||||
*g = (v << fmt->Gloss) + (v >> (8 - fmt->Gloss));
|
||||
*g = (v << fmt->Gloss) + (v >> (8 - (fmt->Gloss << 1)));
|
||||
v = (pixel & fmt->Bmask) >> fmt->Bshift;
|
||||
*b = (v << fmt->Bloss) + (v >> (8 - fmt->Bloss));
|
||||
*b = (v << fmt->Bloss) + (v >> (8 - (fmt->Bloss << 1)));
|
||||
if(fmt->Amask) {
|
||||
v = (pixel & fmt->Amask) >> fmt->Ashift;
|
||||
*a = (v << fmt->Aloss) + (v >> (8 - fmt->Aloss));
|
||||
*a = (v << fmt->Aloss) + (v >> (8 - (fmt->Aloss << 1)));
|
||||
} else
|
||||
*a = SDL_ALPHA_OPAQUE;
|
||||
} else {
|
||||
|
@ -405,11 +405,11 @@ void SDL_GetRGB(Uint32 pixel, SDL_PixelFormat *fmt, Uint8 *r,Uint8 *g,Uint8 *b)
|
|||
/* the note for SDL_GetRGBA above applies here too */
|
||||
unsigned v;
|
||||
v = (pixel & fmt->Rmask) >> fmt->Rshift;
|
||||
*r = (v << fmt->Rloss) + (v >> (8 - fmt->Rloss));
|
||||
*r = (v << fmt->Rloss) + (v >> (8 - (fmt->Rloss << 1)));
|
||||
v = (pixel & fmt->Gmask) >> fmt->Gshift;
|
||||
*g = (v << fmt->Gloss) + (v >> (8 - fmt->Gloss));
|
||||
*g = (v << fmt->Gloss) + (v >> (8 - (fmt->Gloss << 1)));
|
||||
v = (pixel & fmt->Bmask) >> fmt->Bshift;
|
||||
*b = (v << fmt->Bloss) + (v >> (8 - fmt->Bloss));
|
||||
*b = (v << fmt->Bloss) + (v >> (8 - (fmt->Bloss << 1)));
|
||||
} else {
|
||||
*r = fmt->palette->colors[pixel].r;
|
||||
*g = fmt->palette->colors[pixel].g;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue