2013-07-20 35 views
1

我从数据库中检索一幅图像,该图像需要在尺寸为300的JLabel内放入300.在此代码中,图像不会调整大小,而是其中的一部分显示在JLabel里面:调整图像的大小以适合Jlabel of 300 by 300 px

ResultSet r; 

r = s.executeQuery("select * from employee where emp_name='"+user+"'"); 

boolean v=r.next(); 
if (v==true) { 
    add(r.getString("designation"));//to call add function 


    InputStream is = r.getBinaryStream(3); 
    BufferedImage bimg = ImageIO.read(is); 


    bimg.getScaledInstance(300,300,Image.SCALE_SMOOTH); 

    ImageIcon n=new ImageIcon(); 
    n.setImage(bimg); 

    l[1].setIcon(n); 
} 
+0

您也可以看看这个[备选方法](http://stackoverflow.com/a/6916719/1057230),如答案中所述。 –

回答

2

getScaledInstance()不会修改原始图像。做

Image bimg = ImageIO.read(is); 
bimg = bimg.getScaledInstance(300,300,Image.SCALE_SMOOTH); 

改为。

+0

我试过了 但是错误是 sun.awt.image.toolkit不能转换成java.awt.image.BufferedImage – user2558479

+0

ToolkitImage?这是可能的。我改变了没有演员的工作的答案。 – kiheru

+0

+ !,看起来像这样应该可以工作:-),虽然我不是那个知道如何处理图像的人,那很好,在Swing中:-) –

1

假设您的BLOB列名是'图片'。

public void ReadImage(String user, JLabel jl){ 
     try{ 

      String query = "SELECT picture FROM employee WHERE emp_name='"+user+"'"; 
      pst = con.prepareStatement(query); 
      rs = pst.executeQuery(); 

      byte[] imageData = rs.getBytes(1); 
      ImageIcon ii = new ImageIcon(imageData); 
      Image image = ii.getImage(); 
      image = image.getScaledInstance(300, 300, Image.SCALE_SMOOTH); 
      ii = new ImageIcon(image); 
      jl.setIcon(ii); 

     } 
     catch(Exception e){ 
      JOptionPane.showMessageDialog(null, e); 
     } 
    } 
相关问题