1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
import java.awt.Canvas;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
public class PanelImage extends Canvas {
private Image image;
private Image image_new;
private int facteur;
private String url;
private String operation;
private int w;
private int h;
private BufferedImage bufferedImage;
private BufferedImage bufferedImage2;
private BufferedImage bufDest;
private BufferedImage buf;
private BufferedImage g2d2;
private AffineTransform at;
private BufferedImage bImage2;
private BufferedImage Image3;
public PanelImage(BufferedImage bufImg, int facteur, String operation, int width, int height){
this.buf = bufImg;
this.facteur = facteur;
this.operation = operation;
this.w = width;
this.h = height;
if(this.operation == "rotation"){
//On crée d'abord un buffered image avec des pixel blancs pour ne pas en perdre lors de la rotation
int w = buf.getWidth(null);
int h = buf.getHeight(null);
int diag = (int)(Math.sqrt(w*w+h*h));
bufferedImage2 = new BufferedImage(diag, diag, BufferedImage.TYPE_INT_ARGB);
for (int i = 0; i < diag; i++) {
for (int j = 0; j < diag; j++) {
bufferedImage2.setRGB(i, j, 0xffffffff);
}
}
Graphics2D g2 = bufferedImage2.createGraphics();
g2.drawImage(bufferedImage2, (diag-w)/2, (diag-h)/2, null);
w = bufferedImage2.getWidth(null);
h = bufferedImage2.getHeight(null);
Image3 = new BufferedImage(bufferedImage2.getWidth(), bufferedImage2.getHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics2D gr3 = Image3.createGraphics();
int im2x = bufferedImage2.getWidth()/2 - buf.getWidth()/2;
int im2y = bufferedImage2.getHeight()/2 - buf.getHeight()/2;
gr3.drawImage(bufferedImage2,0,0,null);
gr3.drawImage(buf,im2x,im2y,null);
gr3.dispose();
AffineTransform transform = AffineTransform.getRotateInstance(Math.toRadians(facteur), w/2, h/2);
AffineTransformOp op = new AffineTransformOp(transform, AffineTransformOp.TYPE_BILINEAR);
BufferedImage bImage2 = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
bufDest = op.filter(Image3, bImage2);
}
}
public BufferedImage getBufImg(){
return bufDest;
}
} |
Partager