Pergunta

im desenho de um monte de peças em um Canvas, esses blocos são representados por Images ou BufferedImages.

percebi que estou ficando milissegundo sorteios com Imagemas o que eu começar a usar BufferedImages para as telhas o quadro de horário de céu foguetes acima de 20ms.

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

Ambas essas imagens apoio canais alfa.Eu gostaria de começar a usar alpha capaz Image's por intermédio de buffers.No entanto, eu não encontrei um lugar em que o jdk que podem gerá-los, além desse kit de ferramentas chamada para criar um a partir de um arquivo.

Basicamente, alguém sabe como criar uma Imagem em branco (não BufferedImage) a partir do zero que pode oferecer suporte a alpha?

Foi útil?

Solução

Para responder a sua pergunta diretamente:

// 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);

Alguns antecedentes:

Tudo isso vem para baixo para o TIPO de BufferedImage que você está usando.BufferedImage oferece um construtor na qual você pode especificar o TIPO (INT_ARGB, 4BYTE_ARGB, etc.).Quando utilizar o ImageIO, você não tem controle sobre o tipo que é usado na construção do BufferedImage.ImageIO usa tipo "0", que é personalizado.O TIPO de governa o modo como os dados de imagem são armazenados/acessado na memória, que desempenha fortemente na forma como a imagem é desenhada/copiar/blitted para a tela (ou outra imagem).

Eu criei um simples teste com base no seu código e o BufferedImage sempre processa MUITO lentamente.Criar uma segunda BufferedImage com TYPE_INT_ARGB e copiou o primeiro BufferedImage (a partir de ImageIO) para ele.Este TYPE_INT_ARGB BufferedImage processa na mesma velocidade, como o kit de ferramentas de imagem.

Outras dicas

Você pode usar a API antiga do ImageConsumer/ImageProducer para criar objetos de imagem com qualquer conteúdo que desejar.

Isso criará um objeto de imagem a partir de pixels argb no pix Array com a largura e a altura fornecidas:

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top