2011-08-31 13 views
7

tutaj jest mój kod”rozmiaru obrazu java getScaledInstance

ImageIcon ii=new ImageIcon("/Users/tushar_chutani/Desktop/apple.jpg"); 
      Image image= ii.getImage().getScaledInstance(50, 50, Image.SCALE_SMOOTH); 

obraz nie jest skalowany co jest nie tak z tym kodem?

+1

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

+0

obraz nie jest wyświetlany ... obraz zmienia się na biały ... –

+1

To prawdopodobnie nie odczytało obrazu. Nie wysłałeś SSCCE, więc niewiele możemy dla ciebie zrobić. – camickr

Odpowiedz

15

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(); 
     } 
} 
2

Możesz ponownie owinąć obraz w ikonę obrazu. Ikona obrazu zazwyczaj ładuje obraz w swoim konstruktorze i wykorzystuje w tym celu własny moduł śledzenia mediów. Używam następujący kod teraz:

 Image image = icon.getImage().getScaledInstance(
      icon.getIconWidth() * NEW/OLD, 
      icon.getIconHeight() * NEW/OLD, 
      Image.SCALE_SMOOTH); 
    icon = new ImageIcon(image, icon.getDescription()); 

Można bezpośrednio współpracować z nową ikonę lub zadzwoń GetImage() do pracy z nowym obrazem. Powyższy kod ma również współczynnik proporcji zachowujący skalowanie podany w parach NEW i OLD.

Do widzenia

Powiązane problemy