這裏是我的代碼」調整圖像的Java getScaledInstance
ImageIcon ii=new ImageIcon("/Users/tushar_chutani/Desktop/apple.jpg");
Image image= ii.getImage().getScaledInstance(50, 50, Image.SCALE_SMOOTH);
圖像不被縮放什麼是錯的代碼?
這裏是我的代碼」調整圖像的Java getScaledInstance
ImageIcon ii=new ImageIcon("/Users/tushar_chutani/Desktop/apple.jpg");
Image image= ii.getImage().getScaledInstance(50, 50, Image.SCALE_SMOOTH);
圖像不被縮放什麼是錯的代碼?
的問題是,Image.getScaledInstance()
不返回 完成,縮放圖像它留下了很多以後 時間縮放工作時所使用的圖像像素。
例如,如果您使用縮放後的圖像在一個Graphics2D.drawImage()
然後調用該方法將返回false並繼續異步繪製。然後您必須使用Graphics2D.drawImage()
調用中的ImageObserver
參數等待縮放和繪圖的完成。
以下示例顯示如何在不使用ImageObserver
的情況下更簡單地縮放圖像 。縮放是通過將圖標 改爲BufferedImage
來完成的。
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();
}
}
您可以再次將圖像包裹在圖像圖標中。圖像圖標通常會在其構造函數中加載圖像,並使用自己的媒體跟蹤器來達到此目的。我現在使用以下代碼:
Image image = icon.getImage().getScaledInstance(
icon.getIconWidth() * NEW/OLD,
icon.getIconHeight() * NEW/OLD,
Image.SCALE_SMOOTH);
icon = new ImageIcon(image, icon.getDescription());
您可以直接使用新圖標或調用getImage()以使用新圖像。上面的代碼也在一些NEW和OLD對上給出了寬高比保持的縮放比例。
再見
你得到了什麼錯誤?你真的可以顯示原始的ImageIcon嗎?你怎麼知道不是縮放。根據你發佈的兩行代碼,你不會對圖像做任何事情。張貼您的[SSCCE](http://sscce.org),證明問題。 – camickr
圖像未顯示...圖像變爲白色... –
然後它可能沒有讀取圖像。您沒有發佈SSCCE,所以我們無法爲您做任何其他事情。 – camickr