调整图像大小java GetScaleInstance

调整图像大小java GetScaleInstance,java,image,Java,Image,这是我的密码“ 未缩放图像代码有什么问题?问题在于image.getScaledInstance()不返回 已完成的缩放图像。将大部分缩放工作留给以后处理 使用图像像素的时间 例如,如果在Graphics2D.drawImage()中使用缩放图像 然后调用该方法将返回false并继续异步绘制。然后必须使用ImageObserver 调用Graphics2D.drawImage()中的参数,以等待缩放和绘图完成 下面的示例演示如何更简单地缩放图像 没有ImageObserver。缩放是通过绘制图标

这是我的密码“


未缩放图像代码有什么问题?

问题在于
image.getScaledInstance()
不返回 已完成的缩放图像。将大部分缩放工作留给以后处理 使用图像像素的时间

例如,如果在
Graphics2D.drawImage()中使用缩放图像
然后调用该方法将返回false并继续异步绘制。然后必须使用
ImageObserver
调用
Graphics2D.drawImage()中的参数,以等待缩放和绘图完成

下面的示例演示如何更简单地缩放图像 没有
ImageObserver
。缩放是通过绘制图标来完成的 改为将其放入
缓冲区图像中

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()来处理新图像。上面的代码还对一些新的和旧的图像对进行了保持纵横比的缩放

再见

您的代码:

ImageIcon ii=new 
ImageIcon("/Users/tushar_chutani/Desktop/apple.jpg");  
加上这个:

Image image= ii.getImage().getScaledInstance(50, 50, 
Image.SCALE_SMOOTH);
ii=new ImageIcon(image);
如果要显示: 加上这个

jLabel1.setIcon(ii);

你会遇到什么错误?你真的能显示原始图像图标吗?你怎么知道没有缩放。根据你发布的两行代码,你没有对图像做任何处理。发布你的,这说明了问题。图像没有显示…图像变为白色…然后它可能没有读取图像。你没有发布SSCCE,因此我们不能为您做太多其他事情。它是否适用于其他图像。此处报告了某些jpeg由于其颜色模型而出现的一些问题。它不适用于任何其他文件。接受的答案很好,但我认为此答案更容易理解,感谢您的深入了解!
jLabel1.setIcon(ii);