2016-10-28 366 views
0

我就以出色的libvipsJNA指针,指针映射

使用此功能的所有Java绑定工作是好的:

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

@Antonio Casula你在Java VIPS绑定方面有什么进展吗?你有什么可以分享的吗? – alexantd

+0

@alexantd否我放弃了这个想法,我发现了另一个库(更慢)。 –

回答

0

我是libvips维护者,Java绑定会很棒!

但我想你可能会采取错误的做法。我认为你正在尝试C API的直接包装,但这样做会很困难,因为它会使用很多C-ism,这些C-ism不能很好地映射到Java。例如,在C中,您可以编写:

VipsImage *image; 

if (!(image = vips_image_new_from_file("somefile.jpg", 
    "shrink", 2, 
    "autorotate", TRUE, 
    NULL))) 
    error ...; 

ie。最后的NULL标记可变参数名称/值列表的结尾。在这里,我要求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

这是一个PHP为整个库在1800行的C结合

如果可以的话,我会很乐意帮忙。在libvips跟踪器打开一个问题:

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