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