Rotation imag
Le
1 connu
Bonjour,
J'ai fait un petit programme qui permet d'ecrire un texte, faire une rotation et en recuperer l'image dans un jpeg.
Maheureusement impossible de lui faire faire la rotation. Tout le reste marche.
Merci pour votre aide.
Pierre
public class CreateImage {
public CreateImage(String texte) {
try
{
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
BufferedImage outImage =
new BufferedImage(100,
30,
BufferedImage.TYPE_INT_RGB);
Graphics2D g = outImage.createGraphics();
g.setBackground(Color.white);
g.clearRect(0,0,100,30);
g.setColor(Color.red);
g.drawString(texte, 5, 20);
g.scale(20.0d,50.0d);
g.rotate(Math.toRadians(-90));
/* marche pas non plus !
AffineTransform tx = new AffineTransform();
tx.rotate(Math.toRadians(-90));
g.setTransform(tx);
*/
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(outputStream);
encoder.encode(outImage);
FileOutputStream fos = new FileOutputStream("essai.jpeg");
fos.write(outputStream.toByteArray());
outputStream.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
CreateImage createImage1 = new CreateImage("Mon texte bidon");
}
}
J'ai fait un petit programme qui permet d'ecrire un texte, faire une rotation et en recuperer l'image dans un jpeg.
Maheureusement impossible de lui faire faire la rotation. Tout le reste marche.
Merci pour votre aide.
Pierre
public class CreateImage {
public CreateImage(String texte) {
try
{
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
BufferedImage outImage =
new BufferedImage(100,
30,
BufferedImage.TYPE_INT_RGB);
Graphics2D g = outImage.createGraphics();
g.setBackground(Color.white);
g.clearRect(0,0,100,30);
g.setColor(Color.red);
g.drawString(texte, 5, 20);
g.scale(20.0d,50.0d);
g.rotate(Math.toRadians(-90));
/* marche pas non plus !
AffineTransform tx = new AffineTransform();
tx.rotate(Math.toRadians(-90));
g.setTransform(tx);
*/
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(outputStream);
encoder.encode(outImage);
FileOutputStream fos = new FileOutputStream("essai.jpeg");
fos.write(outputStream.toByteArray());
outputStream.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
CreateImage createImage1 = new CreateImage("Mon texte bidon");
}
}

Poser une question


Le .rotate modifie la matrice de transformation courante, il ne fait pas
tourner ce qui a déjà été "écrit" dans le pipeline graphique de Java2D
(voir la doc de Graphics2D). Essayez de mettre le .rorate au début ...
Pensez à positioner un RenderingHints pour l'interpolation à bilinear si
vous souhaitez un rendu amélioré.
Enfin, essayez également d'utiliser ImageIO qui serra plus générique :
File file = new File("essai.jpeg");
ImageIO.write(outImage,"jpeg",fos);
Bon code...
A+
TM
J'ai essayé de mettre le rotate au debut comme cela :
Graphics2D g = outImage.createGraphics();
g.rotate(Math.toRadians(-90)); // nothing done
g.setBackground(Color.white);
g.clearRect(0,0,300,30);
g.setColor(Color.black);
g.setFont(currentFont);
g.drawString(nom, 5, 20);
mais c'est pire, j'ai une image completement noire et non tournée !
Je piges rien ....
Pierre
"TestMan"
Bonjour,
Tout le problème déside dans ce que fait le .rotate ... il tourne autour
de 0,0 comme coordonnées, or faire une rotation de -90° autour de 0,0
d'un text affiché en 5,20 provoque l'affichage en dehors de l'image !
D'où le fait que vous ne voyez pas votre texte :)
Idem pour vos zones de "clear" et autre directives ... ainsi, il ne
reste que la couleur par défaut du modele RGB à savoir 000000, qui est
du noir, CQFD :)
Je vous propose de tester avec le code :
public static void main(String[] args) throws Exception{
BufferedImage image = new BufferedImage(30, 100,
BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();
g.setTransform(AffineTransform.getRotateInstance(Math.toRadians(-90),50.d,50.d));
g.setBackground(Color.WHITE);
g.clearRect(0,0,100,30);
g.setColor(Color.RED);
g.drawString("test 123", 5, 20);
g.scale(20.0d,50.0d);
ImageIO.write(image,"jpeg",args[0]);
}
Vous pouvez en plus remplacer "jpeg" par "png" et TYPE_INT_RGB par
TYPE_INT_ARGB et supprimer le clear et la couleur de fond pour obtenir
un effet de transparence alpha automatique...
Java2D n'a que peu de limites ;-)
A+
TM
Damned, J'ai pas vu ca !
Merci beaucoup, c'est super !
Pierre