Problemem jest to, że Image.getScaledInstance()
nie zwraca skończył, skalowany obraz na . pozostawia wiele prac skalowania późniejszym czasie, gdy wykorzystywane są piksele obrazu.
na przykład, w przypadku korzystania z powiększonym formacie obrazu w Graphics2D.drawImage()
rozmowy następnie metoda zwróci false i kontynuuje rysowanie asynchronicznie. Następnie należy użyć parametru ImageObserver
w wywołaniu Graphics2D.drawImage()
, aby poczekać na zakończenie skalowania i rysowania.
Poniższy przykład pokazuje, jak skalować obrazy bardziej prosto niż bez numeru ImageObserver
. Skalowanie odbywa się przez narysowanie ikony w postaci .
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();
}
}
Jakie błędy otrzymujesz? Czy rzeczywiście możesz wyświetlić oryginalny ImageIcon? Skąd wiesz, że nie jest to skalowanie. Opierając się na dwóch wierszach kodu, które napisałeś, nic nie robisz z obrazem. Opublikuj [SSCCE] (http://sscce.org), który pokazuje problem. – camickr
obraz nie jest wyświetlany ... obraz zmienia się na biały ... –
To prawdopodobnie nie odczytało obrazu. Nie wysłałeś SSCCE, więc niewiele możemy dla ciebie zrobić. – camickr