2017-06-26 3 views
0

j'ai créé 256x256 image avec rouge = x et alpha = y:Comment dessiner des images avec accélération matérielle sur toutes les plates-formes?

int[] pix = new int[256*256]; 
    for (int i = 0; i < pix.length; ++i) 
     pix[i] = i << 16; 
    BufferedImage img1 = new BufferedImage(256, 256, BufferedImage.TYPE_INT_ARGB); 
    img1.setRGB(0, 0, 256, 256, pix, 0, 256); 

et ont copié à l'image volatile:

VolatileImage img2 = canvas.createVolatileImage(256, 256); 
    img2.createGraphics().drawImage(img1, 0, 0, null); 

Quand je dessine BufferedImage à la toile, ce processus de manière incorrecte alpha et pas accéléré (0.9msec pour drawImage):

invalid alpha

Quand je dessine VolatileImage, ce processus al pha et accélérées (0.03ms):

valid aplpha

Mais sous Windows. Sous MacOS je vois un résultat différent. Pour BufferedImage, il ne traite pas alpha, mais accéléré, pour VolatileImage, il traite alpha correctement, mais pas accéléré. (Ou peut-être les deux ne sont pas accélérés, juste un traitement logiciel de BufferedImage beaucoup plus rapide). Question - comment dessiner correctement l'image avec un traitement alpha correct et avec une accélération sur toutes les plates-formes.

ps. img2.setAccelerationPriority (1) n'a aucun effet.

pps. j'ai eu tort, il ne corrige pas le traitement alpha dans le second cas, il s'agit simplement d'une image précalculée avec alpha appliquée à la couleur de fond par défaut des cavas.

Répondre

0
System.getProperties().setProperty("sun.java2d.opengl", "true");   

Ce paramètre problème résolu avec l'accélération, maintenant il 0.004msec pour drawImage

Et il n'y avait pas de problème avec l'alpha traitement du tout, je dessine juste même image avec alpha 1000 fois à même endroit pour les tests de temps et il a causé une telle image laide