Được rồi vì vậy tôi làm cho một trò chơi, và tôi đang cố gắng để thay đổi hình ảnh hit marker ban đầu bằng cách thêm văn bản trên nó, và tôi đang sử dụng đoạn mã sau:BufferedImage sản xuất màu đen nền
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;
}
}
Tập trung đặc biệt vào một trong hai hàm tạo: Và lỗi mà tôi gặp phải là khi tạo BufferedImage và vẽ hình ảnh trên hình ảnh đệm, nó tạo ra một nền đen tự động và tôi không biết tại sao. Tôi đã cố gắng nghiên cứu về chủ đề này và một số nói để thay đổi một cái gì đó về AlphaComposite và phương pháp g.clearRect(), nhưng không phải của những người dường như làm việc. Nhân tiện, hình ảnh tôi vẽ trên ảnh đệm là 35x20 (là kích thước của hình ảnh được đệm) và nó có nền trong suốt. Nếu bất cứ ai có thể cho tôi biết làm thế nào để loại bỏ nền đen này, nó sẽ được rất nhiều đánh giá cao, cảm ơn bạn.
để được trợ giúp tốt hơn sớm hơn đăng một [SSCCE] (http://sscce.org/), hai lý do ---> hầu hết người trả lời không tham gia liên kết bên thứ 3, 2) cho người đọc tương lai – mKorbel
Tôi nghĩ tôi là? –
@JoshM Anh ấy muốn nói, tốt hơn là đăng mã trực tiếp ở đây, hoặc chỉ là phần vấn đề và liên kết tới nguồn đầy đủ, vì vậy nếu liên kết bị chết, câu hỏi của bạn sẽ không trở thành vô ích trong tương lai. – Andrew