J'écris un programme qui va faire du traitement d'image sur une image tiff 16 bits (5 bits rouge, 6 bits vert, 5 bits bleus) mais malheureusement le code que j'ai écrit pour traiter traite les données image comme 8 bits .Comment récupérer des données de pixels 16 bits à partir d'un tiff en Java?
Pour élaborer avec le code, je lis l'image en mémoire avec classe utilitaire ImageIO comme ceci:
BufferedImage image = ImageIO.read(imageFile);
et plus tard sur l'utilisation de cette boucle pour récupérer des informations de pixels:
Matrix imageMatrix = new Matrix(image.getHeight(), image.getWidth());
Raster raster = image.getData();
double[] pixelColor = new double[4];
for (int x = 0; x < image.getWidth(); x = x + 1) {
for (int y = 0; y < image.getHeight(); y = y + 1) {
raster.getPixel(x, y, pixelColor);
double pixelColorAverage = (pixelColor[0] + pixelColor[1] + pixelColor[2])/3.0;
imageMatrix.set(y, x, pixelColorAverage);
}
}
return imageMatrix;
Le le problème est que raster.getPixel(x, y, pixelColor);
renvoie chaque valeur RVB en 8 bits (dans mon image de test, la valeur de 0,0 pixel est renvoyée comme 24,24,24 [valeurs de 8 bits] quand il devrait être 6168,6168,6168 [16 bits]).
J'ai essayé de changer le ImageIO.read(imageFile)
simpliste aux lignes suivantes de code basé sur un autre stack overflow tiff question:
BufferedImage image = ImageIO.read(file);
BufferedImage convertedImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_USHORT_565_RGB);
convertedImage.createGraphics().drawRenderedImage(image, null);
Mais cette fois, les rendements raster.getPixel(x, y, pixelColor);
3,6,3 qui n'est pas correct non plus. Basé sur le fait qu'ImageIO prend en charge les images tiff et que l'image tamponnée a un format d'image 16 bits de style 5-6-5, je ne peux que supposer que c'est possible, mais je suis perplexe quant à ce que je suis. disparu.
comment avez-vous un 'BufferedImage' d'un TIFF un ??? – Gevorg