Comment utiliser TYPE_BYTE_GRAY de créer efficacement une échelle de gris bufferedimage à l'aide de AWT
J'ai besoin de créer une image en niveaux de gris à partir de données dans un nio ShortBuffer. J'ai une fonction qui mappe les données dans le ShortBuffer d'octet non signé mais est dans un int (facilement modifiable). La méthode que j'ai trouvé utilise un RGB, plus de transparence modèle de couleur et semble être assez inefficent. je n'ai pas été en mesure de voir comment appliquer le TYPE_BYTE_GRAY et modifier le code. je suis nouveau sur Java. Voici mon code:
public void paintComponent(Graphics g) {
final BufferedImage image;
int[] iArray = {0, 0, 0, 255}; // pixel
image = (BufferedImage) createImage(WIDTH, HEIGHT);
WritableRaster raster = image.getRaster();
sBuf.rewind(); //nio ShortBuffer
for (int row = 0; row < HEIGHT; row++) {
for (int col = 0; col < WIDTH; col++) {
int v = stats.mapPix(sBuf.get()); //map short to byte
iArray[0] = v; //RGBT
iArray[1] = v;
iArray[2] = v;
raster.setPixel(col, row, iArray);
}
}
g.drawImage(image, 0, 0, getWidth(), getHeight(), null);
}
TIA
Nate
Vous devez vous connecter pour publier un commentaire.
Une approche serait de créer la
BufferedImage
par écrit à la trame comme vous le faites maintenant. Une fois que vous avez laBufferedImage
, vous pouvez le convertir enTYPE_BYTE_GRAY
à l'aide de lafilter()
méthode deColorConvertOp
, comme le montre cette exemple.BufferedImage
directement à partir des données brutes. Je ne vois pas depaint()
méthode; vous pouvez les modifier à votre question de montrer plus de code.Place de l'aide d'un ColorConvertOp, vous pouvez simplement créer une nouvelle échelle de gris BufferedImage et peinture de l'image originale en couleurs sur celui-ci:
Cela devrait effectuer beaucoup plus rapidement et de donner de meilleurs résultats qu'en utilisant la méthode filter ().
Un grand tuturial (y compris des instructions sur la façon d'utiliser un GrayFilter) peut être trouvé ici: http://www.tutorialized.com/tutorial/Convert-a-Color-Image-to-a-Gray-Scale-Image-in-Java/33347