Domanda

Ho un BufferedImage con un'IndexColorModel. Ho bisogno di dipingere l'immagine sullo schermo, ma ho notato che questo è lento quando si utilizza un IndexColorModel. Tuttavia, se corro il BufferedImage attraverso un affine identità trasformo crea un'immagine con un DirectColorModel e la pittura è molto più veloce. Ecco il codice che sto usando

AffineTransformOp identityOp = new AffineTransformOp(new AffineTransform(), AffineTransformOp.TYPE_BILINEAR);
displayImage = identityOp.filter(displayImage, null);

Ho tre domande
1. Perché la pittura la più lenta su un IndexColorModel?
2. Esiste un modo per accelerare la pittura di un IndexColorModel?
3. Se la risposta a 2. non è, è questo il modo più efficiente per convertire da un IndexColorModel ad un DirectColorModel? Ho notato che questa conversione dipende dalla dimensione dell'immagine, e mi piacerebbe rimuovere tale dipendenza.

Grazie per l'aiuto

È stato utile?

Soluzione

Questo è troppo lungo per un commento ...

Sei sicuro che il BufferedImage si sta creando sono i migliori a seconda del sistema operativo si è in? Si dovrebbe sempre creare un BufferedImage "compatibile". Il più veloce, diciamo, di Windows, può essere TYPE_INT_ARGB, ma questo non è vero su OS X e viceversa.

Qualcosa di simile (ahi, la Legge di Demetra fa male;):

GraphicsEnvironment
        .getLocalGraphicsEnvironment()
        .getDefaultScreenDevice()
        .getDefaultConfiguration()
        .createCompatibleImage(width, height,Transparency.TRANSLUCENT)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top