2011-08-31 4 views
7

のサイズを変更すると、イメージがコードで間違っているものを拡大縮小されていないここで画像のJava getScaledInstance

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

「私のコードです?

+1

どのようなエラーが表示されますか?あなたは実際にオリジナルのImageIconを表示できますか?スケーリングではないことはどうやって知っていますか?あなたが投稿したコードの2行に基づいて、あなたは画像で何もしません。問題を示す[SSCCE](http://sscce.org)を投稿してください。 – camickr

+0

イメージが表示されない...イメージが白に変わります... –

+1

それからイメージを読み込んでいない可能性があります。あなたはSSCCEを投稿していないので、私たちがあなたにできることは他にありません。 – camickr

答えて

15

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

画像アイコンに画像を再度ラップすることができます。イメージアイコンは一般的にイメージをそのコンストラクタにロードし、この目的のために独自のメディアトラッカーを使用します。私は次のコードを使用しています:

 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のペアで与えられたスケーリングを保持するアスペクト比も行います。

bye

関連する問題