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 イズムを利用するため、うまく行うのは難しいでしょう。たとえば、C では次のように記述できます。

VipsImage *image;

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

すなわち。最後の NULL は、varargs の名前/値リストの終わりを示します。ここでは、ロード中に x2 圧縮を実行Orientationし、EXIF で見つかったすべてのタグを適用するように jpeg ローダーに要求しています。

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 に答える