首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 平面设计 > 图形图像 >

在Swing的Label中展示网络读取的BMP图像数组

2012-08-21 
在Swing的Label中显示网络读取的BMP图像数组在SWING中显示网络上动态生成的图片,我起初直接用???? ??? ???

在Swing的Label中显示网络读取的BMP图像数组

在SWING中显示网络上动态生成的图片,

我起初直接用

?

??? ??? ??? ImageIcon ic = new ImageIcon(data);//data为网络直接读取来的byte数组
??? ??? ??? lblNewLabel_1.setIcon(ic);
??? ??? ??? lblNewLabel_1.repaint();

?

结果发现经常会遇到有些图片出不来,查了好半天,而且找错还真不好找,因为他不在具体的位置抛异常。抛了个根本找不到源的异常

?

?

?

后来仔细寻找,才发现,动态的图片数组格式有差异,有JPG,有PNG,也有BMP,结果发现BMP的显不出,而且有问题。

?

网上有BMP转JPG图片的代码,但那天只是文件及格式间转换,我还是不太想这样做。但从这代码里发现一个

?

??? ??? image = Toolkit.getDefaultToolkit().createImage(
??? ??? ??? ??? new MemoryImageSource(bh.iWidth, bh.iHeight, ndata, 0,
??? ??? ??? ??? ??? ??? bh.iWidth));

?

因为Swing中ImageIcon好像构造方法是中可以为Image对象的,但Toolkit中createImage的ImageProducer这个参数又不知从何而来。

?

又发现 BufferImage bi=ImageIo.read(inputstream);

而bi.getSource()这个方法返回的对象就是ImageProducer。

?

似乎发现有办法解决。

?

于是,我写成下面这样就搞定了。

BufferedImage bi = ImageIO.read(new ByteArrayInputStream(image));ImageIcon ic = new ImageIcon(Toolkit.getDefaultToolkit().createImage(bi.getSource()));lblNewLabel_1.setIcon(ic);lblNewLabel_1.repaint();
?

?

?

其次,我发现用httpclient中取的inputstream取图标的长度有问题。

我之前喜欢直接用byte data[]=new byte[is.available];is.read(data);

但发现这样不行,容易报错。

所以还是乖乖的这样用

InputStream is = entity.getContent();ByteArrayOutputStream baos=new ByteArrayOutputStream();byte[] buffer=new byte[1024];int len=-1;while((len=is.read(buffer))!=-1){baos.write(buffer, 0, len);}byte[] data = baos.toByteArray();
?

热点排行