GNT sans publicité, site mobile, fonctionnalitées exclusives...

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");
}

}
Lire les 4 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
TestMan
Le #222749
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");
}

}


Bonjour,


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

1 connu
Le #222733
Merci TestMan pour les tuyaux.

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,

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");
}

}
Bonjour,


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



TestMan
Le #222726
Merci TestMan pour les tuyaux.

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


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

1 connu
Le #222725
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 !


Damned, J'ai pas vu ca !
Merci beaucoup, c'est super !

Pierre

Publicité
Suivre les réponses
Poster une réponse
Anonyme