2015-05-01 92 views
0

我創建了一個名爲VainillaImagen類:調整一個ImageIcon一個JLabel的

public VainillaImage(String url){ 
    this.icimg=new ImageIcon(url); 
    this.imagen=new JLabel(this.icimg); 
    this.imagen.setVisible(true); 
} 

,然後我創建了一個名爲methos使用名爲resizeVainillaImg另一種方法setDimensions。但resizeVainillaImg方法不工作任何想法爲什麼?

public void setDimensions(boolean wRel,int width,boolean hRel,int height){ 
    Dimension dimPantalla = Toolkit.getDefaultToolkit().getScreenSize(); 
    int nwidth,nheight; 
    if(wRel){ 
     nwidth=(int)(width*(dimPantalla.width)); 
    }else{ 
     nwidth=width; 
    } 
    if(hRel){ 
     nheight=(int)(height*(dimPantalla.height)); 
    }else{ 
     nheight=height; 
    } 
    resizeVainillaImg(nwidth,nheight); 
} 


public void resizeVainillaImg(int newWidth,int newHeight){ 
    Image img = this.icimg.getImage(); 
    BufferedImage bi = new BufferedImage(newWidth,newHeight, BufferedImage.TYPE_INT_ARGB); 
    Graphics2D g = bi.createGraphics(); 
    g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR); 
    g.drawImage(img, 0, 0, newWidth, newHeight,null); 
    g.dispose(); 
    this.icimg = new ImageIcon(bi); 
    this.imagen.setIcon(this.icimg); 

} 

回答

0

雖然我不明白setDimensions(),但我認爲你正試圖讓你的圖像適合屏幕寬度和高度。

通過乘以setDimensions()中的寬度和高度的int值,您將可以簡單地乘以小的整數。對於更大的數字,由於圖像尺寸巨大(寬度屏幕寬度,高度 screenheight),您將耗盡內存。

讓我們假設您想要調整圖像的大小來調整屏幕的百分比,或者使用默認高度和圖像。使用下面的代碼,傳遞負數(例如-1)忽略屏幕大小,0>數字將其大小調整爲屏幕的百分比。

我希望這個幫助。但是,你必須在你的腦海其他一些人認爲,只要記得使用float因爲INT * INT乘法:)

import java.awt.Dimension; 
import java.awt.Graphics2D; 
import java.awt.Image; 
import java.awt.RenderingHints; 
import java.awt.Toolkit; 
import java.awt.image.BufferedImage; 
import javax.swing.ImageIcon; 
import javax.swing.JDialog; 
import javax.swing.JLabel; 

/** 
* 
* @author Pasban 
*/ 
public class VainillaImage { 

    private ImageIcon icimg; 
    private JLabel imagen; 

    public static void main(String args[]) { 
     JDialog d = new JDialog(); 
     VainillaImage v = new VainillaImage("92-1024x576.jpg"); 
     d.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); 
     d.getContentPane().add(v.imagen); 
     v.setDimensions(-1, 1); 
     d.pack(); 
     d.setLocationRelativeTo(null); 
     d.setVisible(true); 
    } 

    public void setDimensions(double width, double height) { 
     Dimension dimPantalla = Toolkit.getDefaultToolkit().getScreenSize(); 
     int nwidth, nheight; 
     nwidth = (int) (width * (dimPantalla.width)); 
     nheight = (int) (height * (dimPantalla.height)); 
     resizeVainillaImg(nwidth, nheight); 
    } 

    public void resizeVainillaImg(int newWidth, int newHeight) { 
     Image img = this.icimg.getImage(); 
     newWidth = Math.max(newWidth, img.getHeight(null)); 
     newWidth = Math.max(newHeight, img.getHeight(null)); 
     BufferedImage bi = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_ARGB); 
     Graphics2D g = bi.createGraphics(); 
     g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); 
     g.drawImage(img, 0, 0, newWidth, newHeight, null); 
     g.dispose(); 
     this.icimg = new ImageIcon(bi); 
     this.imagen.setIcon(this.icimg); 
    } 

    public VainillaImage(String url) { 
     this.icimg = new ImageIcon(url); 
     this.imagen = new JLabel(this.icimg); 
     this.imagen.setVisible(true); 
    } 
} 
0

的如果你想動態調整基礎上,可用空間爲標籤的圖標,然後檢查出Darryl的Stretch Icon