Add support for 24bit
This commit is contained in:
parent
d69530a45a
commit
263833450d
1 changed files with 23 additions and 1 deletions
|
@ -143,6 +143,28 @@ void RrReduceDepth(const RrInstance *inst, RrPixel32 *data, XImage *im)
|
||||||
}
|
}
|
||||||
} else im->data = (gchar*) data;
|
} else im->data = (gchar*) data;
|
||||||
break;
|
break;
|
||||||
|
case 24:
|
||||||
|
{
|
||||||
|
/* reverse the ordering, shifting left 16bit should be the first byte
|
||||||
|
out of three, etc */
|
||||||
|
const guint roff = (16 - RrRedOffset(inst)) / 8;
|
||||||
|
const guint goff = (16 - RrGreenOffset(inst)) / 8;
|
||||||
|
const guint boff = (16 - RrBlueOffset(inst)) / 8;
|
||||||
|
gint outx;
|
||||||
|
for (y = 0; y < im->height; y++) {
|
||||||
|
for (x = 0, outx = 0; x < im->width; x++, outx += 3) {
|
||||||
|
r = (data[x] >> RrDefaultRedOffset) & 0xFF;
|
||||||
|
g = (data[x] >> RrDefaultGreenOffset) & 0xFF;
|
||||||
|
b = (data[x] >> RrDefaultBlueOffset) & 0xFF;
|
||||||
|
p8[outx+roff] = r;
|
||||||
|
p8[outx+goff] = g;
|
||||||
|
p8[outx+boff] = b;
|
||||||
|
}
|
||||||
|
data += im->width;
|
||||||
|
p8 += im->bytes_per_line;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
case 16:
|
case 16:
|
||||||
for (y = 0; y < im->height; y++) {
|
for (y = 0; y < im->height; y++) {
|
||||||
for (x = 0; x < im->width; x++) {
|
for (x = 0; x < im->width; x++) {
|
||||||
|
@ -191,7 +213,7 @@ void RrReduceDepth(const RrInstance *inst, RrPixel32 *data, XImage *im)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
g_error("Your bit depth is currently unhandled\n");
|
g_error("This image bit depth (%i) is currently unhandled", im->bits_per_pixel);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue