我正在为优秀的libvips
使用此功能一切都很好:
VipsImage *in;
in = vips_image_new_from_file( test.jpg, NULL )
vips_image_write_to_file( in, "out.jpg", NULL )
在Java中映射:
Pointer vips_image_new_from_file(String filename,String params);
但是当我这样的参数出现问题时:
VipsImage *in;
VipsImage *out;
vips_invert( in, &out, NULL )
vips_image_write_to_file( out, "out.jpg", NULL )
我试过了:
int vips_resize(Pointer in, PointerByReference out, Double scale, String params);
Pointer in = vips_image_new_from_file("file.png",null);
PointerByReference ptr1 = new PointerByReference();
vips_invert(in, ptr1, null);
vips_image_write_to_file( ptr1.getValue(), "fileout.png", null);
但是没有用。 ptr1.getValue()
不包含预期结果。
我该怎么做?
由于
答案 0 :(得分:0)
我是libvips维护者,Java绑定会很棒!
但我认为你可能采取了错误的做法。我认为你正在尝试直接包装C API,但这样做会很棘手,因为它使用了许多不能很好地映射到Java的C-isms。例如,在C中你可以写:
VipsImage *image;
if (!(image = vips_image_new_from_file("somefile.jpg",
"shrink", 2,
"autorotate", TRUE,
NULL)))
error ...;
即。最后的NULL标记了varargs名称/值列表的结尾。在这里,我要求jpeg加载程序在加载期间执行x2收缩,并应用它在EXIF中找到的任何Orientation
标记。
libvips有一个基于GObject的低级API,它更容易绑定。在这个问题上有一些讨论和示例代码,其中有人使用p / invoke进行C#绑定。
https://github.com/jcupitt/libvips/issues/558
C ++和PHP绑定的代码可能是一个有用的参考:
https://github.com/jcupitt/libvips/tree/master/cplusplus
https://github.com/jcupitt/php-vips-ext
这是1800行C语言中整个库的PHP绑定。
如果可以,我会很乐意提供帮助。在libvips跟踪器上打开一个问题: