0

我正在为优秀的 Java 绑定工作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()不包含预期结果。

我该怎么做?

谢谢

4

1 回答 1

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 ...;

IE。最后的 NULL 标志着可变参数名称/值列表的结束。在这里,我要求 jpeg 加载器在加载期间进行 x2 收缩,并应用Orientation它在 EXIF 中找到的任何标签。

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 跟踪器上打开一个问题:

https://github.com/jcupitt/libvips/issues

于 2016-10-28T15:12:35.010 回答