Pregunta

im dibujo un montón de tejas de un Canvas, estas baldosas están representados por cualquiera de Images o BufferedImages.

i di cuenta de que im conseguir milisegundos dibuja con Images pero lo que empezar a usar BufferedImages de las baldosas los cohetes cielo Marco de tiempo a 20 ms arriba.

BufferedImage buffered = ImageIO.read(new File(fileName));
Image image = Toolkit.getDefaultToolkit().createImage(fileName);

Ambas imágenes admite canales alfa. Me gustaría empezar a utilizar alfa capaces de Image de buffers intermedios. Sin embargo no he encontrado un lugar en el JDK que pueden generarlos, además de esta llamada Toolkit para crear uno desde un archivo.

Básicamente, ¿alguien sabe cómo crear una imagen en blanco (no BufferedImage) a partir de cero que puede soportar alfa?

¿Fue útil?

Solución

Para responder a su pregunta directamente:

// Create a empty BufferedImage which supports alpha
// It will be just as fast a Toolkit image
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);

Algunos antecedentes:

Todo se reduce al tipo de BufferedImage que está utilizando. BufferedImage ofrece un constructor en el que se puede specifiy el TIPO (INT_ARGB, 4BYTE_ARGB, etc). Al utilizar ImageIO, usted no tiene control sobre el tipo que se usa en la construcción de la BufferedImage. ImageIO utiliza el tipo "0", que es personalizado. El TIPO gobierna cómo se almacena / visitada en la memoria, que juega en gran medida en cómo se dibuja la imagen / copiado / intercambiada a la pantalla (u otra imagen) los datos de imagen.

He creado una prueba simple basado en su código y la BufferedImage siempre hace muy lentamente. Creo un segundo BufferedImage con TYPE_INT_ARGB y copié el primer BufferedImage (de ImageIO) en ella. Este TYPE_INT_ARGB BufferedImage hace a la misma velocidad la imagen Toolkit como.

Otros consejos

Puede utilizar la API de edad ImageConsumer / ImageProducer para crear objetos de imagen con cualquier contenido que desee.

Esto creará un objeto de imagen de píxeles ARGB en la matriz pix con la anchura dada y altura:

public static Image createImage( int width, int height, int[] pix )
{
    return createImage( width, height, pix, 0, width );
}

public static Image createImage( int width, int height, int[] pix, int offs, int scan )
{
    Toolkit toolkit = Toolkit.getDefaultToolkit();
    ImageProducer source = new MemoryImageSource( width, height, pix, offs, scan );
    return toolkit.createImage( source );
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top