Domanda

im disegnando un mucchio di piastrelle su una Canvas, queste piastrelle sono rappresentati da entrambi Images o BufferedImages.

ho notato che nel mese di ottenere millisecondo disegna con Images ma quello che ho iniziare a utilizzare BufferedImages per le piastrelle il cielo razzi lasso di tempo di 20 ms di cui sopra.

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

Entrambe queste immagini supporta i canali alfa. Vorrei iniziare a utilizzare alfa capaci di Image per i buffer intermedi. Tuttavia i havent trovato un posto nel JDK che li può generare oltre a questo invito Toolkit per creare uno da un file.

In sostanza qualcuno sa come creare un immagine in bianco (non BufferedImage) da zero in grado di supportare alpha?

È stato utile?

Soluzione

Per rispondere direttamente alla tua domanda:

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

Alcuni retroscena:

Tutto si riduce al tipo di BufferedImage si sta utilizzando. BufferedImage offre un costruttore in cui è possibile specifiy TYPE (INT_ARGB, 4BYTE_ARGB, ecc). Quando si utilizza ImageIO, non si ha il controllo sul tipo che viene utilizzato nella costruzione del BufferedImage. ImageIO utilizza tipo "0", che è personalizzato. Il TIPO governa come i dati immagine viene memorizzata / accede in memoria che gioca pesantemente sul modo in cui l'immagine viene disegnata / copiati / blitted allo schermo (o un'altra immagine).

ho creato un semplice test, sulla base di codice e l'BufferedImage rende sempre molto lentamente. Creo un secondo BufferedImage con TYPE_INT_ARGB e copiato prima BufferedImage (da ImageIO) in esso. Questo TYPE_INT_ARGB BufferedImage rende alla stessa velocità come immagine Toolkit.

Altri suggerimenti

È possibile utilizzare la vecchia API ImageConsumer / ImageProducer per creare oggetti Image con qualsiasi contenuto che si desidera.

Ciò creerà un oggetto Immagine da pixel ARGB nella matrice pix con la larghezza e l'altezza data:

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 );
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top