2016-10-28 8 views
0

ich arbeite auf eine Java-Bindung für die hervorragende libvipsJNA Zeiger auf Zeiger-Mapping

dieser Funktion werden alle zu verwenden ist fein:

VipsImage *in; 

in = vips_image_new_from_file(test.jpg, NULL) 
vips_image_write_to_file(in, "out.jpg", NULL) 

So in Java abgebildet:

Pointer vips_image_new_from_file(String filename,String params); 

Aber Ich habe ein Problem, wenn der Parameter so ist:

VipsImage *in; 
VipsImage *out; 

vips_invert(in, &out, NULL) 
vips_image_write_to_file(out, "out.jpg", NULL) 

Ich habe versucht:

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

aber nicht funktioniert. Die ptr1.getValue() enthält nicht das erwartete Ergebnis.

Wie kann ich es tun?

Dank

+0

Sie Ihre Frage einrücken sollte, um es besser lesbar. Verwenden Sie backquote, um Ihren Code zu zeigen! –

+0

@Antonio Casula Haben Sie Fortschritte bei Ihrer Java VIPS-Bindung gemacht? Hast du etwas, was du teilen kannst? – alexantd

+0

@alexantd nein Ich habe die Idee aufgegeben, ich fand eine andere Bibliothek (langsamer). –

Antwort

0

ich die libvips Maintainer bin, wäre eine Java-Bindung groß!

Aber ich denke, Sie könnten die falsche Herangehensweise nehmen. Ich denke, Sie versuchen eine geradlinige Zusammenfassung der C-API, aber das wird schwierig zu tun sein, da es viele C-Ismen verwendet, die Java nicht gut abbilden. Zum Beispiel können Sie in C schreiben:

VipsImage *image; 

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

dh. Die letzte NULL markiert das Ende einer Varargs-Namen/Werteliste. Hier frage ich den JPEG-Lader, um eine x2-Schrumpfung während des Ladens zu tun und alle Orientation Tags, die es in der EXIF ​​findet, anzuwenden.

libvips hat eine API auf niedrigerer Ebene, die auf GObject basiert und viel einfacher zu binden ist. In diesem Problem gibt es einige Diskussions- und Beispielcodes, in denen jemand eine C# -Bindung mithilfe von p/invoke vornimmt.

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

Der Code für die C++ und PHP Bindungen könnte ein nützlicher Hinweis sein:

https://github.com/jcupitt/libvips/tree/master/cplusplus

https://github.com/jcupitt/php-vips-ext

Das ist eine PHP in 1800 Zeilen C für die gesamte Bibliothek Bindung

Ich würde sehr glücklich sein zu helfen, wenn ich kann. Öffnen Sie ein Problem auf dem libvips Tracker:

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