BufferedImage produisant fond noir
Allez bien donc je suis en train de faire un jeu, et je suis en train de modifier l'original frappé de l'image du marqueur par l'ajout d'un texte sur elle, et je suis en utilisant le code suivant:
import javax.swing.ImageIcon;
import javax.swing.Timer;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
public class HitMarker {
public static final Image rangeHitMarker = new ImageIcon(HitMarker.class.getResource("rangeHitMarker.png")).getImage();
public static final Image magicHitMarker = new ImageIcon(HitMarker.class.getResource("magicHitMarker.png")).getImage();
public static final Image monsterHitMarker = new ImageIcon(HitMarker.class.getResource("monsterHitMarker.png")).getImage();
public static final Font font = new Font("Tahoma", Font.PLAIN, 10);
public static final Color t = new Color(0,0,0,0);
public Image hitMarker;
public BufferedImage image;
public String hit;
public int attackStyle;
public boolean rangeAttack;
public int x;
public int y;
public Timer timer;
public boolean remove;
public HitMarker(int x, int y, int hit, int attackStyle){
this.hit = String.format("%d", hit);
this.remove = false;
this.x = x;
this.y = y;
this.attackStyle = attackStyle;
this.hitMarker = getImage();
BufferedImage bi = new BufferedImage(35, 20, BufferedImage.TYPE_INT_RGB);
Graphics2D g = bi.createGraphics();
g.drawImage(hitMarker, 0, 0, null);
g.setFont(font);
g.setColor(Color.WHITE);
g.drawString(this.hit, 18, 13);
g.dispose();
image = bi;
timer = new Timer(800,
new ActionListener(){
public void actionPerformed(ActionEvent e){
remove = true;
timer.stop();
}
}
);
timer.setInitialDelay(800);
timer.start();
}
public HitMarker(int x, int y, int hit){
this.hit = String.format("%d", hit);
this.remove = false;
this.x = x;
this.y = y;
this.hitMarker = monsterHitMarker;
BufferedImage bi = new BufferedImage(35, 20, BufferedImage.TYPE_INT_RGB);
Graphics2D g = bi.createGraphics();
g.drawImage(hitMarker, 0, 0, null);
g.setFont(font);
g.setColor(Color.WHITE);
g.drawString(this.hit, 18, 13);
g.dispose();
image = bi;
timer = new Timer(800,
new ActionListener(){
public void actionPerformed(ActionEvent e){
remove = true;
timer.stop();
}
}
);
timer.setInitialDelay(800);
timer.start();
}
public boolean isRangeAttack(){
return attackStyle == AttackStyleConstants.RANGE || attackStyle == AttackStyleConstants.RANGE_DEFENCE ? true : false;
}
public Image getImage(){
return isRangeAttack() ? rangeHitMarker : magicHitMarker;
}
}
En mettant particulièrement l'accent sur constructeur:
Et l'erreur que j'ai est que lorsque je crée le BufferedImage et dessiner l'image sur la mémoire tampon de l'image, c'est la création d'un fond noir automatiquement et je ne sais pas pourquoi. J'ai essayé des recherches sur ce sujet et certains disent de changer quelque chose à propos de la AlphaComposite et la g.clearRect() la méthode, mais aucune de ces semblent fonctionner. Par ailleurs, l'image que je me fais de la peinture sur le tampon d'image est 35x20 (qui est la dimensions de la mémoire tampon d'image) et il a un arrière-plan transparent. Si quelqu'un peut me dire comment supprimer ce fond noir, il serait très apprécié, merci.
Je pensais que j'étais?
Il voulait dire, c'est mieux de poster le code directement ici, ou tout simplement le problème de la partie et un lien vers la source, de sorte que si le lien est mort, votre question ne se uselesss dans l'avenir.
Oh, je vois, je suis désolé pour tout inconvénient que j'ai pu causer. Le problème est particulièrement en soit le constructeur (où j'ai réellement créer le BufferedImage) et j'ai pensé qu'il serait bon de montrer tout le code (en tenant compte de ses < 100) pour plus d'informations. Mais je suppose que ce serait juste bien de montrer que le constructeur.
à droite il y avait +1
OriginalL'auteur Josh M | 2012-06-29
Vous devez vous connecter pour publier un commentaire.
Essayer
BufferedImage.TYPE_INT_ARGB
. Cela permettra de rendre les régions transparent au lieu de noir.depuis que je vais avoir le même problème, j'ai essayé les solutions ci-dessus n'a pas travaillé pour moi , en fait je veux faire de la lumière d'arrière-plan gris au lieu de noir. Peut-on me dire comment faire
OriginalL'auteur Clint
Vous pourriez vouloir essayer et de stocker le canal alpha ainsi,
OriginalL'auteur Andrew
Si vous avez besoin d'un
JPG
avec blanc arrière-plan, vous avez besoin de dessiner l'image comme ceci:De cette façon, vous évitez le fond noir lors du passage de
PNG
àJPG
.OriginalL'auteur IvanRF
Utiliser le format png au lieu de jpeg. Png est beaucoup plus adapté à la transparence des opérations.
Ici est simple export en png extrait de code;
OriginalL'auteur burakim