Suporte de imagens completo na ligação com bibliotecas de C
O LibraryLink é estendido para suportar objetos Image sendo diretamente enviados de ou para bibliotecas externas.
Aqui temos um exemplo para criar um efeito sépia de uma dada imagem representada em um tipo de dado real de 32 bit. Veja o exemplo completo aqui.
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;
}
Carregue a função a partir da biblioteca.
Out[1]= | |
Aplique a função carregada em uma imagem.
Out[2]= | |