- 论坛徽章:
- 0
|
经过一个阶段的努力,终于初见效果。可以在浏览器中看到经过JPEG2000压缩的图片效果。一边经过Jasper库压缩,压缩后经过网络传输,在客户端用JJ2000对图像进行解压缩并在浏览器中显示。不过压缩的是有点慢,呵呵!
在JJ2000中,工作分以下几步完成:
首先是初始化参数列表:
private ParameterList pl;
private ParameterList defpl;
defpl = new ParameterList();
String[][] param = Decoder.getAllParameters();
for (int ii=param.length-1; ii>=0; ii--) {
if(param[ii][3]!=null)
defpl.put(param[ii][0],param[ii][3]);
}
pl = new ParameterList(defpl);
2. 初始化读入的流
如何将输入的流转化成InputStream类型,然后将InputStream转化成RandomAccessIO类型。
此种问题已经解决,需要结合许多对象进行操作:首先定义
private byte[] ImageBuffer = new byte[80960];
private InputStream imageStream;
private DataInputStream reci = null;
在初始化时:
reci = new DataInputStream(basicSocket.getInputStream());
imageStream = new ByteArrayInputStream(ImageBuffer);
reci.read(ImageBuffer,index_JX,video_size-index_JX));如此把reci中的数据读入到ImageBuffer中去,而ImageBuffer又在初始化时转化成了imageStream流了。所以只需执行:
RandomAccessIO in=new ISRandomAccessIO(imageStream,video_size,1,video_size);就可以将imageStream流转化成解码器的入口需要的流了。
3. 执行解码器的解码链:
// **** File Format ****
// If the codestream is wrapped in the jp2 fileformat, Read the
// file format wrapper
ff = new FileFormatReader(in);
ff.readFileFormat();
if(ff.JP2FFUsed) {
in.seek(ff.getFirstCodeStreamPos());
}
// +----------------------------+
// | Instantiate decoding chain |
// +----------------------------+
// **** Header decoder ****
// Instantiate header decoder and read main header
hi = new HeaderInfo();
try {
hd = new HeaderDecoder(in,pl,hi);
} catch (EOFException e) {
System.out.println("error1");
return;
}
int nCompCod = hd.getNumComps();
int nTiles = hi.siz.getNumTiles();
decSpec = hd.getDecoderSpecs();
// Get demixed bitdepths
depth = new int[nCompCod];
for(i=0; i
// **** Bit stream reader ****
try {
breader = BitstreamReaderAgent.
createInstance(in,hd,pl,decSpec,
pl.getBooleanParameter("cdstr_info"),hi);
} catch (IOException e) {
System.out.println("error2");
return;
} catch (IllegalArgumentException e) {
System.out.println("error3");
return;
}
// **** Entropy decoder ****
try {
entdec = hd.createEntropyDecoder(breader,pl);
} catch (IllegalArgumentException e) {
System.out.println("error4");
return;
}
// **** ROI de-scaler ****
try {
roids = hd.createROIDeScaler(entdec,pl,decSpec);
} catch (IllegalArgumentException e) {
System.out.println("error5");
return;
}
// **** Dequantizer ****
try {
deq = hd.createDequantizer(roids,depth,decSpec);
} catch (IllegalArgumentException e) {
System.out.println("error6");
return;
}
// **** Inverse wavelet transform ***
try {
// full page inverse wavelet transform
invWT = InverseWT.createInstance(deq,decSpec);
} catch (IllegalArgumentException e) {
System.out.println("error7");
return;
}
res = breader.getImgRes();
invWT.setImgResLevel(res);
// **** Data converter **** (after inverse transform module)
converter = new ImgDataConverter(invWT,0);
// **** Inverse component transformation ****
ictransf = new InvCompTransf(converter,decSpec,depth,pl);
// **** Color space mapping ****
color1 = ictransf;
// This is the last image in the decoding chain and should be
// assigned by the last transformation:
BlkImgDataSrc decodedImage = color1;
if(color1==null) {
decodedImage = ictransf;
}
int nCompImg = decodedImage.getNumComps();
4. 在浏览器中显示图片
newImage = BlkImgDataSrcImageProducer.createImage(decodedImage);
System.out.println("show new image");
NetworkRobot.imagePanels[index].showImage(newImage);
至此全部完成!
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/16942/showart_104577.html |
|