J'utilise JNI pour obtenir des données d'images brutes dans le format suivant:Essayer de lire les données d'image brutes en Java via JNI
Les données d'image est retournée dans le format d'un DATA32 (32 bits) par pixel un tableau linéaire ordonné du haut à gauche de l'image vers le bas à droite allant de gauche à droite chaque ligne. Chaque pixel a les 8 bits supérieurs comme canal alpha et les 8 bits inférieurs sont les canaux bleus. Les bits d'un pixel sont donc ARGB (du plus au moins significatif, 8 bits par canal). Vous devez remettre les données à un moment donné.
Le format DATA32 est essentiellement un entier non signé en C.
J'obtenir un tableau int [] et puis essayer de créer une image Buffered sur par
int w = 1920;
int h = 1200;
BufferedImage b = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
int[] f = (new Capture()).capture();
for(int i = 0; i < f.length; i++){;
b.setRGB(x, y, f[i]);
}
f est le tableau avec les données de pixel.
Selon la documentation Java cela devrait fonctionner depuis BufferedImage.TYPE_INT_ARGB est:
représente une image avec des composants de couleurs RGBA 8 bits emballés en pixels entiers. L'image a un DirectColorModel avec alpha. Les données de couleur de cette image sont considérées comme n'étant pas prémultipliées avec alpha. Lorsque ce type est utilisé comme argument imageType pour un constructeur BufferedImage, l'image créée est cohérente avec les images créées dans les versions JDK1.1 et antérieures.
A moins d'un RGBA 8 bits, signifie-t-il que tous les composants ajoutés ensemble sont codés en 8bits? Mais c'est impossible.
Ce code fonctionne, mais l'image produite n'est pas du tout comme l'image qu'il devrait produire. Il y a des tonnes d'artefacts. Quelqu'un peut-il voir quelque chose qui cloche manifestement ici?
Remarque j'obtenir mes données de pixels avec
imlib_context_set_image(im);
data = imlib_image_get_data();
dans mon code C, en utilisant la bibliothèque imlib2 avec api http://docs.enlightenment.org/api/imlib2/html/imlib2_8c.html#17817446139a645cc017e9f79124e5a2