2017-08-03 6 views
0

Est-ce que quelqu'un a un moyen de stocker un BufferedImage avec la transparence en tant que BMP en Java? De préférence en utilisant l'API ImageIO.Ecriture d'un BMP avec transparence à l'aide d'ImageIO

Pour une raison quelconque, je ne peux pas écrire un format BMP au format ARGB (BGRA), même si the BMP has supported alpha channel since, at least, Win95. Je peux, cependant, facilement écrire la même image qu'un PNG. Il fonctionne également bien en stockant une image sans alpha, comme TYPE_INT_RGB ou TYPE_3BYTE_BGR.

Tenir compte de l'extrait de code suivant:

public static void main(String[] args) throws IOException { 
    if (!ImageIO.write(new BufferedImage(300, 200, BufferedImage.TYPE_INT_ARGB), "BMP", new File("foo.bmp"))) { 
     System.err.println("Couldn't write BMP!"); 
    } 
    if (!ImageIO.write(new BufferedImage(300, 200, BufferedImage.TYPE_INT_ARGB), "PNG", new File("foo.png"))) { 
     System.err.println("Couldn't write PNG!"); 
    } 
} 

Sortie:

Couldn't write BMP! 

Répondre

1

En BMPImageWriterSpi:

public boolean canEncodeImage(ImageTypeSpecifier type) { 
    ... 
    if (!(numBands == 1 || numBands == 3)) 
     return false; 

Je crains que Java ne supporte pas les PGB 32 bits. Vous devrez écrire le vôtre ou trouver une bibliothèque existante (ImageJ vient à l'esprit bien que je ne sais pas si elle supporte BMP). Wikipédia est très élaboré sur le format de fichier et il semble assez facile, donnant même un exemple complet de Field-by-field d'un BMP 32-bit.

+0

Merci! Je l'ai trouvé aussi, ce qui est assez décevant ... Je vais probablement écrire mon propre plugin BMP. Le format est assez simple, après tout. :-) – haraldK