2012-05-02 10 views
6

Tengo una Imagen Bufer y una matriz booleana [] []. Quiero establecer la matriz en verdadero donde la imagen es completamente transparente.¿Cómo puedo saber dónde tiene BufferedImage Alpha en Java?

Algo así como:

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

Pero el método getAlpha (x, y) no existe, y no he encontrado algo más que pueda utilizar. Hay un método getRGB (x, y), pero no estoy seguro de si contiene el valor alfa o cómo extraerlo.

¿Alguien me puede ayudar? ¡Gracias!

+0

esta pregunta puede ayudar a: http://stackoverflow.com/questions/221830/set-bufferedimage-alpha-mask- in-java –

Respuesta

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

Esto es limpio y eficiente, pero la lógica de esta función es al revés. Según el javadoc en [Color] (http://docs.oracle.com/javase/7/docs/api/java/awt/Color.html), "un valor alfa de 1.0 o 255 significa que el color está completamente opaco y un valor alfa de 0 o 0.0 significa que el color es completamente transparente ". Esta función devuelve verdadero si los bits alfa son 255, lo que significa que el píxel es opaco. – Fr33dan

2

Prueba esto:

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 
} 
Cuestiones relacionadas