Soporte completo de imagen cuando se enlaza a bibliotecas C
LibraryLink ha sido ampliado para dar soporte a objetos Image que son directamente enviados desde o a bibliotecas externas.
Este es un ejemplo para crear un efecto sepia desde una imagen dada, representada en un tipo de datos real de 32 bits. Vea el ejemplo completo aquí.
static void isepia(raw_t_real32 *out, raw_t_real32 *in, mint width,
mint height, mint channels) {
for (mint ii = 0; ii < height; ii++) {
for (mint jj = 0; jj < width; jj++) {
for (mint kk = 0; kk < channels; kk++) {
mint index = channels * (ii * width + jj);
raw_t_real32 r = in[index + 0];
...
out[index + 0] = r * static_cast<raw_t_real32>(0.393) +
g * static_cast<raw_t_real32>(0.769) +
b * static_cast<raw_t_real32>(0.189);
...
for (int ii = 3; ii < channels; ii++) {
out[index + ii] = in[index + ii];
}
}
}
}
return;
}
EXTERN_C DLLEXPORT int speia(WolframLibraryData libData, mint Argc,
MArgument *Args, MArgument res) {
...
data_in = imgFuns->MImage_getReal32Data(image_in);
data_out = imgFuns->MImage_getReal32Data(image_out);
...
ispeia(data_out, data_in, width, height, channels);
MArgument_setMImage(res, image_out);
return LIBRARY_NO_ERROR;
}
Cargue la función desde la biblioteca.
Out[1]= | |
Aplique la función de carga en cualquier imagen.
Out[2]= | |