static void _ccv_read_rgb_raw(ccv_dense_matrix_t** x, const void* data, int type, int rows, int cols, int scanline)
{
int ctype = (type & 0xF00) ? CCV_8U | ((type & 0xF00) >> 8) : CCV_8U | CCV_C3;
ccv_dense_matrix_t* dx = *x = ccv_dense_matrix_new(rows, cols, ctype, 0, 0);
int i, j;
switch (type & 0xF00)
{
case CCV_IO_GRAY:
{
unsigned char* g = dx->data.u8;
unsigned char* rgb = (unsigned char*)data;
int rgb_padding = scanline - cols * 3;
assert(rgb_padding >= 0);
for (i = 0; i < rows; i++)
{
for (j = 0; j < cols; j++)
g[j] = (unsigned char)((rgb[0] * 6969 + rgb[1] * 23434 + rgb[2] * 2365) >> 15), rgb += 3;
rgb += rgb_padding;
g += dx->step;
}
break;
}
case CCV_IO_RGB_COLOR:
default:
{
unsigned char* x_ptr = dx->data.u8;
unsigned char* a_ptr = (unsigned char*)data;
assert(scanline >= cols * 3);
for (i = 0; i < rows; i++)
{
memcpy(x_ptr, a_ptr, cols * 3);
a_ptr += scanline;
x_ptr += dx->step;
}
break;
}
}
}
static void _ccv_read_rgba_raw(ccv_dense_matrix_t** x, const void* data, int type, int rows, int cols, int scanline)
{
int ctype = (type & 0xF00) ? CCV_8U | ((type & 0xF00) >> 8) : CCV_8U | CCV_C3;
ccv_dense_matrix_t* dx = *x = ccv_dense_matrix_new(rows, cols, ctype, 0, 0);
int i, j;
switch (type & 0xF00)
{
case CCV_IO_GRAY:
{
unsigned char* g = dx->data.u8;
unsigned char* rgba = (unsigned char*)data;
int rgba_padding = scanline - cols * 4;
assert(rgba_padding >= 0);
for (i = 0; i < rows; i++)
{
for (j = 0; j < cols; j++)
g[j] = (unsigned char)((rgba[0] * 6969 + rgba[1] * 23434 + rgba[2] * 2365) >> 15), rgba += 4;
rgba += rgba_padding;
g += dx->step;
}
break;
}
case CCV_IO_RGB_COLOR:
{
unsigned char* rgb = dx->data.u8;
int rgb_padding = dx->step - cols * 3;
assert(rgb_padding >= 0);
unsigned char* rgba = (unsigned char*)data;
int rgba_padding = scanline - cols * 4;
assert(rgba_padding >= 0);
for (i = 0; i < rows; i++)
{
for (j = 0; j < cols; j++)
rgb[0] = rgba[0], rgb[1] = rgba[1], rgb[2] = rgba[2],
rgb += 3, rgba += 4;
rgba += rgba_padding;
rgb += rgb_padding;
}
break;
}
default:
{
unsigned char* x_ptr = dx->data.u8;
unsigned char* a_ptr = (unsigned char*)data;
assert(scanline >= cols * 4);
for (i = 0; i < rows; i++)
{
memcpy(x_ptr, a_ptr, cols * 4);
a_ptr += scanline;
x_ptr += dx->step;
}
break;
}
}
}
static void _ccv_read_argb_raw(ccv_dense_matrix_t** x, const void* data, int type, int rows, int cols, int scanline)
{
int ctype = (type & 0xF00) ? CCV_8U | ((type & 0xF00) >> 8) : CCV_8U | CCV_C3;
ccv_dense_matrix_t* dx = *x = ccv_dense_matrix_new(rows, cols, ctype, 0, 0);
int i, j;
switch (type & 0xF00)
{
case CCV_IO_GRAY:
{
unsigned char* g = dx->data.u8;
unsigned char* argb = (unsigned char*)data;
int argb_padding = scanline - cols * 4;
assert(argb_padding >= 0);
for (i = 0; i < rows; i++)
{
for (j = 0; j < cols; j++)
g[j] = (unsigned char)((argb[1] * 6969 + argb[2] * 23434 + argb[3] * 2365) >> 15), argb += 4;
argb += argb_padding;
g += dx->step;
}
break;
}
case CCV_IO_RGB_COLOR:
{
unsigned char* rgb = dx->data.u8;
int rgb_padding = dx->step - cols * 3;
assert(rgb_padding >= 0);
unsigned char* argb = (unsigned char*)data;
int argb_padding = scanline - cols * 4;
assert(argb_padding >= 0);
for (i = 0; i < rows; i++)
{
for (j = 0; j < cols; j++)
rgb[0] = argb[1], rgb[1] = argb[2], rgb[2] = argb[3],
rgb += 3, argb += 4;
argb += argb_padding;
rgb += rgb_padding;
}
break;
}
default:
{
unsigned char* x_ptr = dx->data.u8;
unsigned char* a_ptr = (unsigned char*)data;
assert(scanline >= cols * 4);
for (i = 0; i < rows; i++)
{
memcpy(x_ptr, a_ptr, cols * 4);
a_ptr += scanline;
x_ptr += dx->step;
}
break;
}
}
}
static void _ccv_read_bgr_raw(ccv_dense_matrix_t** x, const void* data, int type, int rows, int cols, int scanline)
{
int ctype = (type & 0xF00) ? CCV_8U | ((type & 0xF00) >> 8) : CCV_8U | CCV_C3;
ccv_dense_matrix_t* dx = *x = ccv_dense_matrix_new(rows, cols, ctype, 0, 0);
int i, j;
switch (type & 0xF00)
{
case CCV_IO_GRAY:
{
unsigned char* g = dx->data.u8;
unsigned char* bgr = (unsigned char*)data;
int bgr_padding = scanline - cols * 3;
assert(bgr_padding >= 0);
for (i = 0; i < rows; i++)
{
for (j = 0; j < cols; j++)
g[j] = (unsigned char)((bgr[2] * 6969 + bgr[1] * 23434 + bgr[0] * 2365) >> 15), bgr += 3;
bgr += bgr_padding;
g += dx->step;
}
break;
}
case CCV_IO_RGB_COLOR:
{
unsigned char* rgb = dx->data.u8;
int rgb_padding = dx->step - cols * 3;
assert(rgb_padding >= 0);
unsigned char* bgr = (unsigned char*)data;
int bgr_padding = scanline - cols * 3;
assert(bgr_padding >= 0);
for (i = 0; i < rows; i++)
{
for (j = 0; j < cols; j++)
rgb[0] = bgr[2], rgb[1] = bgr[1], rgb[2] = bgr[0],
rgb += 3, bgr += 3;
bgr += bgr_padding;
rgb += rgb_padding;
}
break;
}
default:
{
unsigned char* x_ptr = dx->data.u8;
unsigned char* a_ptr = (unsigned char*)data;
assert(scanline >= cols * 3);
for (i = 0; i < rows; i++)
{
memcpy(x_ptr, a_ptr, cols * 3);
a_ptr += scanline;
x_ptr += dx->step;
}
break;
}
}
}
static void _ccv_read_bgra_raw(ccv_dense_matrix_t** x, const void* data, int type, int rows, int cols, int scanline)
{
int ctype = (type & 0xF00) ? CCV_8U | ((type & 0xF00) >> 8) : CCV_8U | CCV_C3;
ccv_dense_matrix_t* dx = *x = ccv_dense_matrix_new(rows, cols, ctype, 0, 0);
int i, j;
switch (type & 0xF00)
{
case CCV_IO_GRAY:
{
unsigned char* g = dx->data.u8;
unsigned char* bgra = (unsigned char*)data;
int bgra_padding = scanline - cols * 4;
assert(bgra_padding >= 0);
for (i = 0; i < rows; i++)
{
for (j = 0; j < cols; j++)
g[j] = (unsigned char)((bgra[2] * 6969 + bgra[1] * 23434 + bgra[0] * 2365) >> 15), bgra += 4;
bgra += bgra_padding;
g += dx->step;
}
break;
}
case CCV_IO_RGB_COLOR:
{
unsigned char* rgb = dx->data.u8;
int rgb_padding = dx->step - cols * 3;
assert(rgb_padding >= 0);
unsigned char* bgra = (unsigned char*)data;
int bgra_padding = scanline - cols * 4;
assert(bgra_padding >= 0);
for (i = 0; i < rows; i++)
{
for (j = 0; j < cols; j++)
rgb[0] = bgra[2], rgb[1] = bgra[1], rgb[2] = bgra[0],
rgb += 3, bgra += 4;
bgra += bgra_padding;
rgb += rgb_padding;
}
break;
}
default:
{
unsigned char* x_ptr = dx->data.u8;
unsigned char* a_ptr = (unsigned char*)data;
assert(scanline >= cols * 4);
for (i = 0; i < rows; i++)
{
memcpy(x_ptr, a_ptr, cols * 4);
a_ptr += scanline;
x_ptr += dx->step;
}
break;
}
}
}
static void _ccv_read_abgr_raw(ccv_dense_matrix_t** x, const void* data, int type, int rows, int cols, int scanline)
{
int ctype = (type & 0xF00) ? CCV_8U | ((type & 0xF00) >> 8) : CCV_8U | CCV_C3;
ccv_dense_matrix_t* dx = *x = ccv_dense_matrix_new(rows, cols, ctype, 0, 0);
int i, j;
switch (type & 0xF00)
{
case CCV_IO_GRAY:
{
unsigned char* g = dx->data.u8;
unsigned char* abgr = (unsigned char*)data;
int abgr_padding = scanline - cols * 4;
assert(abgr_padding >= 0);
for (i = 0; i < rows; i++)
{
for (j = 0; j < cols; j++)
g[j] = (unsigned char)((abgr[3] * 6969 + abgr[2] * 23434 + abgr[1] * 2365) >> 15), abgr += 4;
abgr += abgr_padding;
g += dx->step;
}
break;
}
case CCV_IO_RGB_COLOR:
{
unsigned char* rgb = dx->data.u8;
int rgb_padding = dx->step - cols * 3;
assert(rgb_padding >= 0);
unsigned char* abgr = (unsigned char*)data;
int abgr_padding = scanline - cols * 4;
assert(abgr_padding >= 0);
for (i = 0; i < rows; i++)
{
for (j = 0; j < cols; j++)
rgb[0] = abgr[3], rgb[1] = abgr[2], rgb[2] = abgr[1],
rgb += 3, abgr += 4;
abgr += abgr_padding;
rgb += rgb_padding;
}
break;
}
default:
{
unsigned char* x_ptr = dx->data.u8;
unsigned char* a_ptr = (unsigned char*)data;
assert(scanline >= cols * 4);
for (i = 0; i < rows; i++)
{
memcpy(x_ptr, a_ptr, cols * 4);
a_ptr += scanline;
x_ptr += dx->step;
}
break;
}
}
}
static void _ccv_read_gray_raw(ccv_dense_matrix_t** x, const void* data, int type, int rows, int cols, int scanline)
{
int ctype = (type & 0xF00) ? CCV_8U | ((type & 0xF00) >> 8) : CCV_8U | CCV_C1;
ccv_dense_matrix_t* dx = *x = ccv_dense_matrix_new(rows, cols, ctype, 0, 0);
int i, j;
switch (type & 0xF00)
{
case CCV_IO_RGB_COLOR:
{
unsigned char* rgb = dx->data.u8;
unsigned char* g = (unsigned char*)data;
int rgb_padding = dx->step - cols * 3;
assert(rgb_padding >= 0);
for (i = 0; i < rows; i++)
{
for (j = 0; j < cols; j++)
rgb[0] = rgb[1] = rgb[2] = g[j], rgb += 3;
g += scanline;
rgb += rgb_padding;
}
break;
}
case CCV_IO_GRAY:
default:
{
unsigned char* x_ptr = dx->data.u8;
unsigned char* a_ptr = (unsigned char*)data;
assert(scanline >= cols);
for (i = 0; i < rows; i++)
{
memcpy(x_ptr, a_ptr, cols);
a_ptr += scanline;
x_ptr += dx->step;
}
break;
}
}
}