J'essaie d'extraire plus de performance de mon pipeline de rendu. La partie (de loin) la plus lente effectue un java.awt.imaging.LookupOp sur une grande image.Recherche Op performance
La taille de l'image est d'environ 2048x2048.
J'ai compris que faire le filtre avec l'opération de dessin est beaucoup plus rapide que d'appeler la méthode de filtrage. Cependant, cela nous laisse toujours avec des opérations de recherche qui prennent environ 250ms (ou 4 fps). Est-ce que quelqu'un a des conseils de rendu?
Heres essentiellement ce que nous faisons:
public void paint(Graphics g)
{
if(recalcLUT)
{
Graphics2D g2d = (Graphics2D) displayImage.getGraphics();
g2d.drawImage(srcImage, lut, 0, 0);
}
Graphics2D g2d = (Graphics2D) g;
g2d.clearRect(0, 0, this.getWidth(), this.getHeight());
AffineTransform at = new AffineTransform();
at.setToIdentity();
at.scale(scale, scale);
g2d.drawImage(displayImage, at, null);
}
la variable LUT est un LookupOp généralement un ShortLookupOp, l'image d'une image en niveaux de gris 16bit
Merci
Je sais il y a d'autres optimisations de performance évidentes qui pourraient être faites ici. Mais le problème majeur est juste de faire l'opération LookupOp donc je suis à la recherche de conseils à ce sujet. Les Ops de recherche sont essentiellement l'endroit où vous créez un tableau et au lieu de rendre chaque pixel de l'image comme couleur, vous utilisez la couleur comme index dans le tableau et restituez la couleur comme valeur dans l'index. Dans cet exemple particulier, je l'utilise pour faire des opérations simples de luminosité/contraste. Vous pouvez également implémenter ceci en utilisant un reseauOp qui est essentiellement un moyen d'appliquer une fonction linéaire à la valeur de tous les pixels. Mais cela s'avère être plus lent.