Datos de puntero de imagen BufferedImage como un parámetro JNI para la función C

Estoy desarrollando una aplicación Java que usa JNI (puente a la biblioteca dinámica/compartida de C). En el lado de Java de la aplicación, estoy generando una serie de imágenes, y en el código C, las estoy codificando en un video.

Sé que podría guardar las imágenes en un archivo temporal de algún tipo y pasar la ruta del archivo a C, pero eso parece complicado y lento.

¿Es posible para mí obtener los datos de la matriz BufferedImage RGB24 y pasarlos a C?

Soy bastante nuevo en Java y JNI.

preguntado el 27 de julio de 12 a las 18:07

Marque este enlace: java.sun.com/docs/books/jni/html/objtypes.html hay una sección dedicada a arreglos y JNI. -

2 Respuestas

es totalmente posible transferir byte[] de Java a C.

es realmente simple pero realmente necesitas ver las firmas de tu método. buscando código de ejemplo ..

  JNIEXPORT jbyteArray passToC(JNIEnv* env, jobject obj, jbyteArray array)
  {
      int length = (*env)->GetArrayLength(env, array);
      byte data[256];
      (*env)->GetByteArrayRegion(env, array, 0, 256, data);
      //data should hold your bytes now.
  }

aquí hay un enlace útil también http://docs.oracle.com/javase/1.4.2/docs/guide/jni/spec/functions.html

editar: pero como dije, tenga mucho cuidado con el nombre del método, ya que necesita tener un paquete/clase en algún lugar...

mira este tambien ¿Llamadas JNI diferentes en C vs C ++? arrojará mucha luz sobre JNI, ya que los tutoriales en línea nunca parecen mencionar el hecho de que JNI ES DIFERENTE PARA C++ que para C bastante claro...

contestado el 23 de mayo de 17 a las 11:05

Tanto usted como AljoshaBre respondieron esencialmente con la misma información y, lamentablemente, no puedo elegir ambas como la respuesta aceptada, pero quería que supiera que encontré la información aquí muy útil y complementaria a la otra respuesta. ¡Gracias por la ayuda! - OzBarry

eso es genial, realmente no me importa mucho el representante siempre que resuelva su problema. gracias por marcar esto como 'útil';) - tiburón

Sí lo es.

jintArray or jbyteArray es la estructura que debe utilizar.

Y si no recuerdo mal, hay getRGB(...) método de BufferedImage que devuelve una matriz de enteros que representan valores RGB.

Entonces, junte esos dos y estará en camino.

Consulta este documento para firmas de métodos, etc.

Respondido 27 Jul 12, 18:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.