Cライブラリと接続する場合の完全な画像サポート
LibraryLink が拡張され,Imageオブジェクトの外部ライブラリとの直接の送受信ががサポートされるようになった.
以下は32ビットの実数型で表現された指定画像からセピア効果を生成する例である.完全な例はここでご覧いただきたい.
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;
}
ライブラリから関数をロードする.
Out[1]= | |
ロードされた関数を任意の画像に適用する.
Out[2]= | |