J'essaye d'écrire 16 bit en niveaux de gris imagedata à un png en utilisant BufferedImage.TYPE_USHORT_GRAY. Normalement, j'écris une image comme ceci:Ecrit en 16 bits BufferedImage TYPE_USHORT_GRAY
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
alors:
image.setRGB(x,y,Color.getRGB);
pour définir les pixels, et enfin:
ImageIO.write(image, "png", new File(path + ".png"));
à écrire à une image .png.
Mais maintenant, j'ai ce que l'image:
BufferedImage imageGray = new BufferedImage(width, height, BufferedImage.TYPE_USHORT_GRAY);
Comment puis-je aller sur l'enregistrement de pixels à ce format? L'utilisation de setRGB() avec un entier de 16 bits ne semble pas fonctionner, quand j'ouvre le fichier png enregistré, je vois beaucoup de baguage se produire.
J'ai essayé d'enregistrer un dégradé simple de 0 à 65535 puis d'utiliser setRGB() sur l'image en niveaux de gris et j'ai vérifié les résultats dans Photoshop. Je peux voir l'image se compose de plus petits gradients tous les 256 rangs. Je suppose que setRGB() ou imageIO ne fonctionne pas comme je le voudrais.
Y a-t-il des solutions de contournement pour cela? Est-ce que imageIO prend même en charge le format BufferedImage.TYPE_USHORT_GRAY? Ou peut-il seulement enregistrer des données de 8 bits? Et si cela peut sauver des données 16bit, comment est-ce que je pourrais sauver des données de pixel, de préférence d'une manière comme setRGB() fonctionne (donc pour une certaine coordonnée x, y)?
Essayez d'utiliser le Raster directement? –
Hm, pourquoi je ne pense pas à ça ... semble bien fonctionner, merci! (pourriez-vous republier comme réponse pour que je puisse l'accepter?) – FinalArt2005