Je suis programmation en Java.Rendu 2 images avec la couleur d'arrière-plan de l'image supérieure transparente
Je suis essentiellement faire un outil de peinture. L'utilisateur peut sélectionner une image d'arrière-plan, utiliser une souris pour tracer une ligne ou effacer une ligne. Lorsque vous effacez une ligne, l'image d'arrière-plan doit toujours être la même. Donc, ce que j'essayais de faire était d'avoir une image séparée pour l'image d'arrière-plan et une autre image pour suivre le mouvement de la souris et tracer des lignes. Je combine ensuite ces 2 images pour montrer l'image finale.
Le problème que je suis incapable de résoudre est la fonction d'effacement. J'ai essayé d'utiliser setXORMode qui fonctionne très bien si j'ai une image de fond qui a 1 couleur. Mais si l'image a une couleur dégradée, les lignes que je dessine changent aussi de couleur.
Voici l'extrait du code que je travaillais sur:
private void backgroundImageOverNote()
{
Graphics2D g = image.createGraphics();
g.drawImage(backgroundImage.getImage(), 0, 0, 400, 200, null);
g.drawImage(sketchImage, 0, 0, 400, 200, null);
g.dispose();
}
public void sketch(SketchData sketchEvent)
{
if(isValidXYPosition(sketchEvent.getX(), sketchEvent.getY()))
{
Graphics2D g = sketchImage.createGraphics();
g.drawLine(oldX, oldY, sketchEvent.getX(), sketchEvent.getY());
g.dispose();
}
oldX = sketchEvent.getX();
oldY = sketchEvent.getY();
}
private BufferedImage sketchImage = new BufferedImage(400, 200, BufferedImage.TYPE_INT_ARGB);
private ImageIcon backgroundImage;
Merci pour votre réponse! Mais je ne suis peut-être pas clair sur mon post précédent. La deuxième couche que j'utilisais a un fond blanc. Si l'utilisateur veut effacer une ligne, je dessine simplement une ligne en blanc qui correspond à la couleur de fond pour la 2ème couche. Ce que je voulais vraiment arriver, c'est quand je dessine la 2ème couche (sketchImage) je ne veux pas que le blanc dessine sur mon image finale. Je définis le mode XOR sur blanc avant que je dessine le deuxième calque de sorte qu'il utilise la même couleur de backgroundImage. Ce qui a conduit au problème que j'essayais de résoudre. – dan
Je pense que c'est ce que j'ai besoin de faire: filtre blanc à transparent http://stackoverflow.com/questions/665406/how-to-make-a-color-transparent-in-a-bufferedimage-and-save- as-png – dan
Essayez ce que je suggère - croyez-moi, ça fonctionne. La chose naïve à faire est de peindre sur la couche supérieure avec la même couleur que la couche de fond. Mais une meilleure solution consiste à * effacer * la couche supérieure, en laissant transparaître la couche inférieure. C'est beaucoup plus simple, et il sera beaucoup plus facile de raisonner. Ma méthode fait essentiellement ce que l'image liée fait - en mettant le composite alpha à effacer, tout ce que vous dessinez sur l'image efface à la place (définit à transparent) cette section de l'image. – I82Much