Vấn đề là Image.getScaledInstance()
không trả lại một xong, hình ảnh thu nhỏ Nó để lại nhiều tác vụ mở rộng cho thời gian sau đó là khi sử dụng pixel hình ảnh.
Ví dụ: nếu bạn sử dụng hình ảnh được chia tỷ lệ trong cuộc gọi Graphics2D.drawImage()
phương thức sẽ trả về false và tiếp tục vẽ không đồng bộ. Sau đó, bạn phải sử dụng thông số ImageObserver
trong cuộc gọi Graphics2D.drawImage()
để chờ hoàn thành việc chia tỷ lệ và bản vẽ.
Ví dụ sau cho thấy cách chia tỷ lệ hình ảnh đơn giản hơn mà không cần ImageObserver
. Việc chia tỷ lệ được thực hiện bằng cách vẽ biểu tượng thành một BufferedImage
thay thế.
import javax.swing.ImageIcon;
import java.awt.image.BufferedImage;
import java.awt.Image;
import java.awt.Color;
import java.awt.Graphics2D;
import java.io.File;
import javax.imageio.ImageIO;
import java.awt.RenderingHints;
public class Tushar2
{
public void scaleImage()
{
try
{
ImageIcon ii = new ImageIcon("/tmp/apple.jpg");
BufferedImage bi = new BufferedImage(50, 50, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = (Graphics2D)bi.createGraphics();
g2d.addRenderingHints(new RenderingHints(RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY));
boolean b = g2d.drawImage(ii.getImage(), 0, 0, 50, 50, null);
System.out.println(b);
ImageIO.write(bi, "jpg", new File("/tmp/apple50.jpg"));
}
catch (Exception e)
{
e.printStackTrace();
}
}
public static void main(String []args)
{
new Tushar2().scaleImage();
}
}
Nguồn
2011-09-03 13:31:08
Bạn gặp phải lỗi gì? Bạn có thực sự hiển thị ImageIcon gốc không? Làm thế nào để bạn biết là không mở rộng quy mô. Dựa trên hai dòng mã bạn đăng bạn không làm gì với hình ảnh. Đăng [SSCCE] của bạn (http://sscce.org) để minh họa sự cố. – camickr
hình ảnh không hiển thị ... hình ảnh thay đổi thành màu trắng ... –
Sau đó, có thể nó không đọc hình ảnh. Bạn đã không đăng SSCCE, vì vậy chúng tôi không thể làm gì khác cho bạn. – camickr