2011-08-31 13 views
7

boyutlandırma burada görüntü koduyla sorun nedir ölçekli varlık değildirgörüntü java getScaledInstance

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

benim kod"?

+1

Hangi hatalarla karşılaşıyorsunuz? Orijinal ImageIcon'u gerçekten görüntüleyebilir misiniz? Nasıl biliyorsun, ölçekleme değil. Yayınladığınız iki kod satırına bağlı olarak, görüntü ile hiçbir şey yapmazsınız. Sorunu gösteren [SSCCE] 'yi (http://sscce.org) gönderin. – camickr

+0

görüntü görünmüyor ... görüntü beyaz olarak değişir ... –

+1

O zaman muhtemelen görüntüyü okumadı. SSCCE göndermediniz, bu yüzden sizin için yapabileceğimiz başka bir şey yok. – camickr

cevap

15

sorun Image.getScaledInstance() bir bitmiş ölçekli görüntüyü döndürmek olmamasıdır resim pikselleri kullanıldığında. Bu bir sonraki süre ölçeklendirme çalışmalarının çok bırakır. Örneğin

, bir Graphics2D.drawImage() çağrısında ölçekli resim kullanıyorsanız o zaman yöntem false değerini döndürür ve zaman uyumsuz olarak çizmeye devam eder. Daha sonra ölçeklendirme ve çizimin tamamlanmasını beklemek için Graphics2D.drawImage() aramasındaki ImageObserver parametresini kullanmanız gerekir.

Aşağıdaki örnek, görüntüleri ImageObserver olmadan daha basit şekilde ölçeklendirmeyi gösterir. Ölçeklendirme, simgesini BufferedImage içine çekerek yapılır.

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

Resmi bir görüntü simgesine tekrar sarabilirsiniz. Bir resim simgesi genellikle görüntüyü yapıcısına yükler ve bu amaçla kendi medya izleyicisini kullanır. Şimdi aşağıdaki kodu kullanıyorum: Doğrudan yeni bir simge ile çalışmak veya getImage çağırabilir

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

() yeni görüntü ile çalışmak. Yukarıdaki kod, bazı YENİ ve OLD çiftlerinde verilen ölçeklemeyi koruyan bir en boy oranını da yapar.

Hoşçakal

İlgili konular