kopia lustrzana https://gitlab.com/sane-project/backends
pixma: for grayscale conversion use BT.709 luma
Before we used linear grayscale conversion. This is not state of the art.reorg-descriptions
rodzic
199b9eeef6
commit
6e52b3f01a
|
@ -335,7 +335,7 @@ pixma_r_to_ir (uint8_t * gptr, uint8_t * sptr, unsigned w, unsigned c)
|
||||||
|
|
||||||
/* convert 24/48 bit RGB to 8/16 bit grayscale
|
/* convert 24/48 bit RGB to 8/16 bit grayscale
|
||||||
*
|
*
|
||||||
* Formular: g = (R + G + B) / 3
|
* Formular: Y' = 0,2126 R' + 0,7152 G' + 0,0722 B'
|
||||||
*
|
*
|
||||||
* sptr: source color scale buffer
|
* sptr: source color scale buffer
|
||||||
* gptr: destination gray scale buffer
|
* gptr: destination gray scale buffer
|
||||||
|
@ -345,19 +345,28 @@ pixma_r_to_ir (uint8_t * gptr, uint8_t * sptr, unsigned w, unsigned c)
|
||||||
uint8_t *
|
uint8_t *
|
||||||
pixma_rgb_to_gray (uint8_t * gptr, uint8_t * sptr, unsigned w, unsigned c)
|
pixma_rgb_to_gray (uint8_t * gptr, uint8_t * sptr, unsigned w, unsigned c)
|
||||||
{
|
{
|
||||||
unsigned i, j, g;
|
unsigned i, g;
|
||||||
|
|
||||||
/* PDBG (pixma_dbg (4, "*pixma_rgb_to_gray*****\n")); */
|
/* PDBG (pixma_dbg (4, "*pixma_rgb_to_gray*****\n")); */
|
||||||
|
|
||||||
for (i = 0; i < w; i++)
|
for (i = 0; i < w; i++)
|
||||||
{
|
{
|
||||||
for (j = 0, g = 0; j < 3; j++)
|
if (c == 6)
|
||||||
{
|
{ /* 48 bit RGB */
|
||||||
g += *sptr++;
|
unsigned r = sptr[0] + (sptr[1] << 8);
|
||||||
if (c == 6) g += (*sptr++ << 8); /* 48 bit RGB: high byte */
|
unsigned y = sptr[2] + (sptr[3] << 8);
|
||||||
}
|
unsigned b = sptr[4] + (sptr[5] << 8);
|
||||||
|
|
||||||
|
g = (r * 2126) + (y * 7152) + (b * 722);
|
||||||
|
sptr += 6;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{ /* 24 bit RGB */
|
||||||
|
g = (sptr[0] * 2126) + (sptr[1] * 7152) + (sptr[2] * 722);
|
||||||
|
sptr += 3;
|
||||||
|
}
|
||||||
|
g /= 10000; /* 8 and 16 bit gray */
|
||||||
|
|
||||||
g /= 3; /* 8 or 16 bit gray */
|
|
||||||
*gptr++ = g;
|
*gptr++ = g;
|
||||||
if (c == 6) *gptr++ = (g >> 8); /* 16 bit gray: high byte */
|
if (c == 6) *gptr++ = (g >> 8); /* 16 bit gray: high byte */
|
||||||
}
|
}
|
||||||
|
|
Ładowanie…
Reference in New Issue