2012-08-28 39 views
10

Tôi đang cố xoay hình ảnh. Tôi đang sử dụng mã này Java:Java - Xoay ảnh

BufferedImage oldImage = ImageIO.read(new FileInputStream("C:\\workspace\\test\\src\\10.JPG")); 
BufferedImage newImage = new BufferedImage(oldImage.getHeight(), oldImage.getWidth(), oldImage.getType()); 
Graphics2D graphics = (Graphics2D) newImage.getGraphics(); 
graphics.rotate(Math.toRadians(90), newImage.getWidth()/2, newImage.getHeight()/2); 
graphics.drawImage(oldImage, 0, 0, oldImage.getWidth(), oldImage.getHeight(), null); 
ImageIO.write(newImage, "JPG", new FileOutputStream("C:\\workspace\\test\\src\\10_.JPG")); 

Nhưng tôi thấy kết quả kỳ lạ:

Nguồn:

**Sourse image:**

Kết quả:

**Result image:** http://s14.postimage.org/cjut935ip/image.jpg

Bạn có thể xin vui lòng giúp đỡ tôi với vấn đề này?

+3

Bạn không nên xoay vòng về trung tâm của OldImage, thay vì newImage? –

+0

Tôi thử graphics.rotate (Math.toRadians (90), oldImage.getWidth()/2, oldImage.getHeight()/2); Không phải sự trợ giúp của nó. http://s13.postimage.org/7omxa1oef/image.jpg – user1631241

Trả lời

14

Không đủ để chuyển đổi chiều rộng và chiều cao của hình ảnh. Bạn đang quay bằng cách sử dụng trung tâm của hình ảnh làm nguồn gốc của vòng quay. Chỉ cần thử cùng với một tờ giấy và bạn sẽ thấy nó hoạt động theo cùng một cách. Bạn cũng phải di chuyển giấy một chút, có nghĩa là áp dụng một biến đổi để sửa lỗi này. Vì vậy, ngay sau khi cuộc gọi xoay, làm điều này:

graphics.translate((newImage.getWidth() - oldImage.getWidth())/2, (newImage.getHeight() - oldImage.getHeight())/2); 
+0

Nó hoạt động! Rất cảm ơn! – user1631241

+0

Tôi biết :) Bạn được chào đón. –

+0

Tôi cảm thấy xấu hổ vì không nghĩ ngay về điều này ... :-p – oldrinb

0

Hình ảnh mới có kích thước khác nhau do xoay. thử điều này: BufferedImage newImage = new BufferedImage (oldImage.getWidth(), oldImage.getHeight(), oldImage.getType());

+0

Uh, anh ấy rất ý thức về các kích thước khác nhau. Mã của bạn không giải quyết được gì. – oldrinb

+0

Đã thử. Sau này tôi có: http://s11.postimage.org/4jvhjtewz/image.jpg – user1631241

0

Cố gắng nhận giới hạn của bảng điều khiển của bạn mà bạn làm bản vẽ của bạn

Rectangle rect = this.getBounds(); 

Và sau đó làm:

graphics.rotate(Math.toRadians(90), (rect.width - newImage.getWidth())/2, (rect.height - newImage.getHeight())/2); 

Hope có thể giúp Cheers!

+0

đã trễ một phút ... tốt: P –

0

Bạn có thể viết như nó sẽ được công việc này.

BufferedImage newImage = new BufferedImage(oldImage.getWidth(), oldImage.getHeight(), oldImage.getType()); 

Tôi nghĩ địa điểm cho số widthheight không đúng trong mã của bạn.