Sujet : [Java] passage d'un tableau dans DLL et retour ? c'est encore moi! |
Cherrytree |
Pour ma part, c'est mort. Je veux dire qu'à moins de te faire le projet (j'ai pas le temps), je ne peux pas aider. JNI, je l'ai bossé la première pour te filer un coup de main et c'est tout. Il va falloir trouver plus doué. Encore désolé. |
Babekiller |
Et voilà on y a tous cru !!!! :lol:
Mais non il me reste encore un truc qui marche pas!!! :(
Résumé des épisodes précédents : :??:
Mon projet est de créer une application java qui affiche une image :
Puis une DLL se charge des transformations à apporter a cette image. L?interface marche et je sais créer la DLL. (merci a tous :jap: )
La DLL affiche un « Hello World » maintenant je dois lui passer l?image sous forme d?un tableau.
Apparemment le tableau arrive jusqu'à la DLL puisque je peux afficher la longueur correct du tableau 4*largeur*hauteur (en pixel).
Mais après c?est la merde. Et impossible de trouver le bon tutorial chez SUN !!!!
Alors voilà le .c
#include "jni.h"
#include "ImageProcessingPanel.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_ImageProcessingPanel_displayHelloWorld
(JNIEnv *env, jobject obj)
{
printf("Hello world!\n" );
return;
}
JNIEXPORT jintArray JNICALL Java_ImageProcessingPanel_procesImage
(JNIEnv *env, jobject obj, jintArray t)
{
int i;
jintArray imgt;
jsize len = (*env)->GetArrayLength(env,t);
jint *img =(*env)->GetIntArrayElements(env,t,0);
for (i=0; i <= len ;i++)
{
img[i]=0;
}
imgt = (*env)->NewIntArray(env, *img);
(*env)->ReleaseIntArrayElements(env,t,img,0);
printf("%d\n",len);
printf("%d\n",img); return imgt;
}
Et le java :
class ImageProcessingPanel extends JPanel {
public native void displayHelloWorld();
public native int[] procesImage(int t[]);
static {
System.loadLibrary("imgp" );
}
????.
Et
void dllhello()
{
displayHelloWorld();
}
void dllPImage()
{
WritableRaster raster = image.getRaster();
System.out.println(image.getColorModel());
int[] pixels = new int[4 * image.getWidth() * image.getHeight()];
raster.getPixels(0,0,image.getWidth(),image.getHeight(),pixels);
raster.setPixels(0,0,image.getWidth(),image.getHeight(),procesImage(pixels));
repaint();
} ?????.
Et les sources complètes :
http://perso.club-internet.fr/jmgary/Projet_Java.rar [jfdsdjhfuetppo]--Message édité par Babekiller--[/jfdsdjhfuetppo] |