2011-11-24 1 views
0

JPG에서 직사각형 상자에 문자열을 렌더링하는 쉬운 방법을 찾고 있는데 반해 텍스트 상자에는 줄 바꿈이 자동으로 수행됩니다.자바 1.6 Graphics2D : 텍스트를 상자에 렌더링

Graphics2D으로 가능합니까? 한 줄에 문자열을 렌더링

다음 코드 조각은 좋은 JPG 출력 압축 품질뿐만 아니라 안티 앨리어싱을 사용, 쉽게 :

BufferedImage img = ImageIO.read(new File(".../input.jpg")); 
int width = img.getWidth(); 
int height = img.getHeight(); 

Color zgColor = new Color(0xAB,0x3C,0x2E); 
Color grey = new Color(0xCC,0xCC,0xCC); 

BufferedImage bufferedImage = new BufferedImage(width, height, img.getType()); 
Graphics2D g = bufferedImage.createGraphics(); 
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
// draw graphics 
g.drawImage(img, 0, 0, null); 
g.setColor(zgColor); 
int y = 900; 
int x = 50; 
g.setFont(new Font("Arial", Font.BOLD, 80)); 
g.drawString("Demo Text", x, y); 

y+=80; 
g.setColor(Color.WHITE); 
g.setFont(new Font("Arial", Font.BOLD, 60)); 
g.drawString("Some other text a bit below", x, y); 

y+=400; 
g.setFont(new Font("Arial", Font.BOLD, 30)); 
g.setColor(Color.WHITE); 
g.drawString("AND THIS WOULD BE THE TEXT I'D LIKE TO FIT INTO A BOX WITH AUTOMATIC LINE BREAKS", x, y); 

g.dispose(); 

// Save as high quality JPEG 
File targetFile = new File(".......result.jpg"); 
//ImageIO.write(bufferedImage, "jpg", targetFile); // this would give bad quality! 

Iterator iter = ImageIO.getImageWritersByFormatName("jpeg"); 
ImageWriter writer = (ImageWriter)iter.next(); 
ImageWriteParam iwp = writer.getDefaultWriteParam(); 
iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); 
iwp.setCompressionQuality(1); // best quality 
FileImageOutputStream output = new FileImageOutputStream(targetFile); 
writer.setOutput(output); 
IIOImage image = new IIOImage(bufferedImage, null, null); 
writer.write(null, image, iwp); 
writer.dispose();    
System.out.println("Done."); 

답변

3

체크 아웃 LineBreakMeasurer. API에는 시작하기위한 몇 가지 예제 코드가 있습니다.

또는 다른 방법은 이미지로 JLabel을 만드는 것입니다. 그런 다음 JTextArea를 레이블에 추가하고 배치 속성을 on으로 설정할 수 있습니다. 그런 다음 텍스트 영역을 레이블에 추가하면 텍스트가 자동으로 줄 바꿈됩니다. 텍스트의 위치를 ​​제어하려면 레이블 내의 텍스트 영역 경계를 수동으로 설정해야합니다.

+0

고맙습니다. JTextArea가 그것을 해결했습니다. – basZero