Question

im tirant une bande de tuiles sur un Canvas, ces carreaux sont représentés soit par Images ou BufferedImages.

i remarqué que im se dessine avec milliseconde Images mais ce que je commencer à utiliser BufferedImages pour les tuiles les fusées ciel de temps de trame à 20ms ci-dessus.

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

Ces deux images supportent les canaux alpha. Je voudrais commencer à utiliser pour les tampons intermédiaires de alpha capables de Image. Cependant, je ne ai pas trouvé une place dans le jdk qui peuvent les générer en plus cet appel de boîte à outils pour créer un à partir d'un fichier.

ne Fondamentalement quelqu'un sait comment créer une image vierge (non BufferedImage) à partir de zéro qui peut supporter alpha?

Était-ce utile?

La solution

Pour répondre directement à votre question:

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

Un peu d'histoire:

Tout se résume au type de BufferedImage que vous utilisez. BufferedImage offre un constructeur dans lequel vous pouvez spécifier le TYPE (INT_ARGB, 4BYTE_ARGB, etc.). Lorsque vous utilisez ImageIO, vous ne pouvez pas contrôler le type qui obtient utilisé dans la construction du BufferedImage. ImageIO utilise le type « 0 » qui est la coutume. Le TYPE régit la façon dont les données d'image sont stockées / accès à la mémoire qui joue fortement sur la façon dont l'image est dessinée / copie / blittée à l'écran (ou toute autre image).

J'ai créé un test simple en fonction de votre code et le BufferedImage rend toujours très lentement. Créer un deuxième BufferedImage avec TYPE_INT_ARGB et copié le premier BufferedImage (de ImageIO) en elle. Cette TYPE_INT_ARGB BufferedImage rend à la même vitesse que l'image Toolkit.

Autres conseils

Vous pouvez utiliser l'ancienne API ImageConsumer / ImageProducer pour créer des objets d'image avec tout contenu que vous souhaitez.

Ceci va créer un objet de l'image de pixels ARGB dans le réseau de pix avec la largeur et une hauteur données:

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 );
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top