2012-05-02 6 views
6

Ho un oggetto BuferredImage e un array booleano [] []. Voglio impostare la matrice su true dove l'immagine è completamente trasparente.Come posso scoprire dove un BufferedImage ha Alpha in Java?

Qualcosa di simile:

for(int x = 0; x < width; x++) { 
    for(int y = 0; y < height; y++) { 
     alphaArray[x][y] = bufferedImage.getAlpha(x, y) == 0; 
    } 
} 

Ma il metodo getAlpha (x, y) non esiste, e non ho trovato niente altro che possa usare. Esiste un metodo getRGB (x, y), ma non sono sicuro che contenga il valore alfa o come estrarlo.

Qualcuno può aiutarmi? Grazie!

+0

questa domanda può aiutare: http://stackoverflow.com/questions/221830/set-bufferedimage-alpha-mask- in-java –

risposta

6
public static boolean isAlpha(BufferedImage image, int x, int y) 
{ 
    return image.getRBG(x, y) & 0xFF000000 == 0xFF000000; 
} 
for(int x = 0; x < width; x++) 
{ 
    for(int y = 0; y < height; y++) 
    { 
     alphaArray[x][y] = isAlpha(bufferedImage, x, y); 
    } 
} 
+0

Questo è pulito ed efficiente ma la logica di questa funzione è al contrario. Secondo javadoc su [Color] (http://docs.oracle.com/javase/7/docs/api/java/awt/Color.html), "un valore alfa di 1.0 o 255 significa che il colore è completamente opaco e un valore alfa di 0 o 0.0 significa che il colore è completamente trasparente. " Questa funzione restituisce true se i bit alfa sono 255, il che significa che il pixel è opaco. – Fr33dan

2

Prova questo:

Raster raster = bufferedImage.getAlphaRaster(); 
    if (raster != null) { 
     int[] alphaPixel = new int[raster.getNumBands()]; 
     for (int x = 0; x < raster.getWidth(); x++) { 
      for (int y = 0; y < raster.getHeight(); y++) { 
       raster.getPixel(x, y, alphaPixel); 
       alphaArray[x][y] = alphaPixel[0] == 0x00; 
      } 
     } 
    } 
1
public boolean isAlpha(BufferedImage image, int x, int y) { 
    Color pixel = new Color(image.getRGB(x, y), true); 
    return pixel.getAlpha() > 0; //or "== 255" if you prefer 
}