Last active
March 24, 2024 22:47
-
-
Save Markismus/14e286a86fde3b6904980536e8ab9986 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- backend/dip-obj.c | |
+++ backend/dip-obj.c | |
@@ -556,43 +556,72 @@ | |
} | |
/*! \todo Add support for 16 bit color values (#816). | |
+ Added the commits of https://github.com/hean01/iscan/commit/147edc66ceddb34b5e0c8745a08ce6c96e7e02b5 and https://github.com/hean01/iscan/commit/575468d83bb70d928f5893c4c4b4ce7faa15e3d5 to support 16bit color. | |
*/ | |
void | |
dip_apply_color_profile (const void *self, const buffer *buf, | |
const double profile[9]) | |
{ | |
SANE_Int i; | |
- SANE_Byte *r_buf, *g_buf, *b_buf; | |
double red, grn, blu; | |
- SANE_Byte *data; | |
SANE_Int size; | |
require (dip == self && buf && profile); | |
- require (8 == buf->ctx.depth); | |
+ require (buf->ctx.depth == 8 || buf->ctx.depth == 16); | |
if (SANE_FRAME_RGB != buf->ctx.format) | |
return; | |
- data = buf->ptr; | |
- size = buf->end - buf->ptr; | |
+ if (buf->ctx.depth == 8) | |
+ { | |
+ SANE_Byte *r_buf, *g_buf, *b_buf; | |
+ SANE_Byte *data; | |
- for (i = 0; i < size / 3; i++) | |
+ data = buf->ptr; | |
+ size = buf->end - buf->ptr; | |
+ | |
+ for (i = 0; i < size / 3; i++) | |
+ { | |
+ r_buf = data; | |
+ g_buf = data + 1; | |
+ b_buf = data + 2; | |
+ | |
+ red = | |
+ profile[0] * (*r_buf) + profile[1] * (*g_buf) + profile[2] * (*b_buf); | |
+ grn = | |
+ profile[3] * (*r_buf) + profile[4] * (*g_buf) + profile[5] * (*b_buf); | |
+ blu = | |
+ profile[6] * (*r_buf) + profile[7] * (*g_buf) + profile[8] * (*b_buf); | |
+ | |
+ *data++ = clamp (red, 0, 255); | |
+ *data++ = clamp (grn, 0, 255); | |
+ *data++ = clamp (blu, 0, 255); | |
+ } | |
+ } | |
+ else if (buf->ctx.depth == 16) | |
{ | |
- r_buf = data; | |
- g_buf = data + 1; | |
- b_buf = data + 2; | |
- | |
- red = | |
- profile[0] * (*r_buf) + profile[1] * (*g_buf) + profile[2] * (*b_buf); | |
- grn = | |
- profile[3] * (*r_buf) + profile[4] * (*g_buf) + profile[5] * (*b_buf); | |
- blu = | |
- profile[6] * (*r_buf) + profile[7] * (*g_buf) + profile[8] * (*b_buf); | |
- | |
- *data++ = clamp (red, 0, 255); | |
- *data++ = clamp (grn, 0, 255); | |
- *data++ = clamp (blu, 0, 255); | |
+ uint16_t *r_buf, *g_buf, *b_buf; | |
+ uint16_t *data; | |
+ | |
+ data = (uint16_t *)buf->ptr; | |
+ while(data < buf->end) | |
+ { | |
+ r_buf = data; | |
+ g_buf = data + 1; | |
+ b_buf = data + 2; | |
+ | |
+ red = | |
+ profile[0] * (*r_buf) + profile[1] * (*g_buf) + profile[2] * (*b_buf); | |
+ grn = | |
+ profile[3] * (*r_buf) + profile[4] * (*g_buf) + profile[5] * (*b_buf); | |
+ blu = | |
+ profile[6] * (*r_buf) + profile[7] * (*g_buf) + profile[8] * (*b_buf); | |
+ | |
+ *data++ = clamp (red, 0, 65535); | |
+ *data++ = clamp (grn, 0, 65535); | |
+ *data++ = clamp (blu, 0, 65535); | |
+ } | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment