6 * Copyright: Copyright (c) 2001
13 import java.util.Vector;
14 import javax.media.jai.*;
15 import com.sun.media.jai.codec.*;
16 import java.awt.image.renderable.ParameterBlock;
18 public class WebdbImage
21 // default values for scaling
22 private int maxIconSize=120;
23 private int maxImageSize=640;
25 private byte[] iconData;
26 private byte[] imageData;
27 private int iconWidth;
28 private int iconHeight;
30 // internal representation of the image
31 private PlanarImage planarImage;
35 public WebdbImage(byte[] image)
38 planarImage = JAI.create("stream",new ByteArraySeekableStream(image));
42 public WebdbImage(byte[] image, int iconMax)
46 planarImage = JAI.create("stream",new ByteArraySeekableStream(image));
50 public WebdbImage(byte[] image, int iconMax, int imageMax)
54 maxImageSize=imageMax;
55 planarImage = JAI.create("stream",new ByteArraySeekableStream(image));
61 public int getIconWidth() throws IOException {
62 if (iconData==null) scaleIcon();
66 public int getIconHeight() throws IOException {
67 if (iconData==null) scaleIcon();
71 public int getImageWidth() {
72 return (int)planarImage.getWidth();
75 public int getImageHeight() {
76 return (int)planarImage.getHeight();
79 public byte[] getImage() {
80 if (imageData==null) {
81 ByteArrayOutputStream outStream = new ByteArrayOutputStream();
82 // @todo the choice of PNG or JPEG should be made configurable
83 JAI.create("encode", planarImage, outStream, "JPEG", null);
84 imageData = outStream.toByteArray();
89 public byte[] getIcon()
92 if (iconData == null) scaleIcon();
96 private void scaleImage()
97 throws java.io.IOException
99 if (maxImageSize>0 && ( getImageHeight()> maxImageSize|| getImageWidth() >maxImageSize))
101 System.out.println("SCALE_IMAGE");
103 ParameterBlockJAI params = new ParameterBlockJAI("scale");
104 params.addSource(planarImage);
105 if (getImageHeight() > getImageWidth())
106 scale = (float)maxImageSize / (float)getImageHeight();
108 scale = (float)maxImageSize / (float)getImageWidth();
110 params.setParameter("xScale", scale);
111 params.setParameter("yScale", scale);
112 params.setParameter("xTrans",0.0F);
113 params.setParameter("yTrans",0.0F);
114 params.setParameter("interpolation",new InterpolationBilinear());
115 planarImage = JAI.create("scale", params);
119 private void scaleIcon()
120 throws java.io.IOException
122 System.out.println("SCALE_ICON");
123 if (iconData==null) {
125 ParameterBlockJAI params = new ParameterBlockJAI("scale");
126 params.addSource(planarImage);
127 if (getImageHeight() > getImageWidth())
128 scale = (float)maxIconSize / (float)getImageHeight();
130 scale = (float)maxIconSize / (float)getImageWidth();
132 params.setParameter("xScale", scale);
133 params.setParameter("yScale", scale);
134 params.setParameter("xTrans",0.0F);
135 params.setParameter("yTrans",0.0F);
136 params.setParameter("interpolation",new InterpolationBilinear());
137 PlanarImage temp = JAI.create("scale", params);
138 ByteArrayOutputStream outStream = new ByteArrayOutputStream();
139 // @todo the choice of PNG or JPEG should be made configurable
140 JAI.create("encode", temp, outStream, "JPEG", null);
141 iconData = outStream.toByteArray();
142 iconWidth=temp.getWidth();
143 iconHeight=temp.getHeight();