Topic: 缩放 SQL Server中Image字段的JPG图片时遇到的几个问题,特向大家请教 |
Print this page |
1.缩放 SQL Server中Image字段的JPG图片时遇到的几个问题,特向大家请教 | Copy to clipboard |
Posted by: wgz_jz Posted on: 2004-10-21 23:13 本人是JAVA初学者,现准备编一Applet,功能为显示SQL Server中Image字段的JPG图片及某一部分的定位 信息,并将图片与定位信息按比例缩放,(环境为JBuilderX + JDBC for SQL Server)。 思路如下:利用 getBinaryStream 将JPG数据读出后,利用 getScaledInstance 将图片缩放后用 setIcon 赋给 JLabel显示。 现遇到如下问题: 1、在 JBuilderX 中运行时,图片显示正常,而打包成 JAR 后从 IE 中运行时不显示图片。此时若将从 数据库中读取的图片换成静态图片却能显示。 2、在 JBuilderX 中能正常显示动态读取的 JPG 图片时,将图片放大却出现 java.lang.OutOfMemoryError,而缩小显示却正常。 另有一个问题,如果将 JdbLabel 的 ColumIcon 绑定到 SQL Server 的 Image 字段时,如何对图片进行 动态缩放? 部分程序代码如下: private float displayRatio = 1.00F; //缩放比例 private Image scaledPicture; //缩放后的 JPG 图片 private ImageIcon iconPicture = new ImageIcon(); //从数据库中读取得原始 JPG 图片 private byte[] pictureBuffer = new byte[5*1024*1024]; JLabel imgLocation = new JLabel(); JLabel imgPicture = new JLabel(); JPanel jPanelPicture = new JPanel(); JScrollPane jScrollPicture = new JScrollPane(); jScrollPicture.getViewport().add(jPanelPicture, null); jPanelPicture.add(imgLocation, new XYConstraints(0, 0, 0, 0)); jPanelPicture.add(imgPicture, new XYConstraints(0, 0, 0, 0)); //queryOnePicture 的 SQL 为 "select 图 from 图表 where 图ID=:pictureID" try { InputStream inputImage = queryOnePicture.getBinaryStream(1); int lengthReaded=-1,positionCurrent=0; do { lengthReaded = inputImage.read(pictureBuffer, positionCurrent, inputImage.available()); positionCurrent = positionCurrent + lengthReaded; } while (lengthReaded != -1); inputImage.close(); } catch (Exception e) { e.printStackTrace(); } iconPicture = new ImageIcon(pictureBuffer); imgPicture.setVisible(false); scaledPicture = iconPicture.getImage().getScaledInstance( (int)(iconPicture.getIconWidth() * displayRatio), (int)(iconPicture.getIconHeight() * displayRatio), Image.SCALE_FAST); imgPicture.setIcon(new ImageIcon(scaledPicture)); jPanelPicture.remove(imgPicture); jPanelPicture.add(imgPicture,new XYConstraints(0, 0, 0, 0),1); imgPicture.setVisible(true); |
2.Re:缩放 SQL Server中Image字段的JPG图片时遇到的几个问题,特向大家请教 [Re: wgz_jz] | Copy to clipboard |
Posted by: wgz_jz Posted on: 2004-10-24 13:27 问题已经解决,在 IE 中显示非常好,图片放大显示也没问题。 但仍有个比较困惑的问题: 这个问题是利用 IE 中的 JAVA 控制台来调试解决的,为什么在 JBuilderX 中却没有这些 Warning 信息呢? 改正后的部分程序代码如下: private float displayRatio = 1.00F; //缩放比例 private Image scaledPicture; //缩放后的 JPG 图片 private ImageIcon iconPicture = new ImageIcon(); JLabel imgLocation = new JLabel(); JLabel imgPicture = new JLabel(); JPanel jPanelPicture = new JPanel(); JScrollPane jScrollPicture = new JScrollPane(); jScrollPicture.getViewport().add(jPanelPicture, null); jPanelPicture.add(imgLocation, new XYConstraints(0, 0, 0, 0)); jPanelPicture.add(imgPicture, new XYConstraints(0, 0, 0, 0)); //queryOnePicture 的 SQL 为 "select 图 from 图表 where 图ID=:pictureID" try { InputStream inputImage = null; try { inputImage = queryOnePicture.getBinaryStream(1); int lengthReaded=-1,positionCurrent=0; do { //从数据库中读取得原始 JPG 图片 private byte[] pictureBuffer = new byte[inputImage.available()+1]; lengthReaded = inputImage.read(pictureBuffer, positionCurrent, inputImage.vailable()); positionCurrent = positionCurrent + lengthReaded; } while (lengthReaded != -1); inputImage.close(); } catch (Exception e) { e.printStackTrace(); } } catch (Exception e) { e.printStackTrace(); } iconPicture = new ImageIcon(pictureBuffer); imgPicture.setVisible(false); scaledPicture = iconPicture.getImage().getScaledInstance((int)(iconPicture.getIconWidth() * displayRatio),(int)(iconPicture.getIconHeight() * displayRatio),Image.SCALE_FAST); imgPicture.setIcon(new ImageIcon(scaledPicture)); imgPicture.setVisible(true); |
3.Re:缩放 SQL Server中Image字段的JPG图片时遇到的几个问题,特向大家请教 [Re: wgz_jz] | Copy to clipboard |
Posted by: kavinwang Posted on: 2004-10-24 13:44 谢谢你贴出解决后的代码! |
Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1 客服电话 18559299278 客服信箱 714923@qq.com 客服QQ 714923 |