Java velocità vernice rispetto al modello di colore
-
22-09-2019 - |
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
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)