Tôi đã có lớp được gọi là Airplane
. Bên trong lớp này tôi đã có biến img
là một loại BufferedImage
.Xoay ảnh bằng AffineTransform
@Override
public void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(mapa, 0, 0, getWidth(), getHeight(), null);
drawAirplanes(g2d);
}
Chức năng drawAirplanes()
cái nhìn như thế này::
private void drawAirplane(Graphics2D g){
for(Samolot i: s){
i.rotateAirplane();
g.drawImage(i.getImg(),i.getX(),i.getY(),(int)i.getDim().getWidth(),(int)i.getDim().getHeight(), null);
}
}
Nó đơn giản chỉ cần 1) xoay máy bay (BufferedImage bên trong đối tượng trên máy bay) 2) vẽ tôi hơn tôi đã có lớp WorldMap
mà đè chức năng paintComponent(Graphics g)
là gì anh ta.
Airplane.rotateAirplane của tôi() chức năng trông như thế này:
public void rotateSamolot() {
AffineTransform tx = new AffineTransform();
tx.translate(10,10); //10, 10 is height and width of img divide by 2
tx.rotate(Math.PI/2);
tx.translate(-10,-10);
AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR);
BufferedImage newImage =new BufferedImage(20, 20, img.getType()); //20, 20 is a height and width of img ofc
op.filter(img, newImage);
this.img = newImage;
}
OFC khi im chạy chương trình của tôi chỉ mapa
đối tượng được rút ra. khi im xóa làn này
this.img = newImage;
tôi đã nhận OFC máy bay của tôi quá nhưng không xoay.
Tôi không chắc chắn bạn muốn dịch các AffineTransform, bạn nên, thay vào đó, cung cấp các điểm quay với phương pháp xoay, mà thường là điểm trung tâm, nhưng đó là vào bạn. Tôi cũng sẽ không chỉ định kết quả của việc quay trở lại hình ảnh chính nếu không bạn tăng lãi kép .... – MadProgrammer
Tôi "nghĩ" về cơ bản những gì đang xảy ra, là hình ảnh của bạn đang được quay "ngoài giới hạn" của không gian có sẵn ... – MadProgrammer
Bạn có thể xem [ví dụ này] (http://stackoverflow.com/questions/15779877/rotate-bufferedimage-inside-jpanel/15780090#15780090) – MadProgrammer