Converted media Interface to use streams (Java IO) instead of byte buffers of
[mir.git] / source / mir / misc / WebdbImage.java
1 /*
2  * Copyright (C) 2001, 2002  The Mir-coders group
3  *
4  * This file is part of Mir.
5  *
6  * Mir is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * Mir is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with Mir; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  *
20  * In addition, as a special exception, The Mir-coders gives permission to link
21  * the code of this program with the com.oreilly.servlet library, any library
22  * licensed under the Apache Software License, The Sun (tm) Java Advanced
23  * Imaging library (JAI), The Sun JIMI library (or with modified versions of
24  * the above that use the same license as the above), and distribute linked
25  * combinations including the two.  You must obey the GNU General Public
26  * License in all respects for all of the code used other than the above
27  * mentioned libraries.  If you modify this file, you may extend this exception
28  * to your version of the file, but you are not obligated to do so.  If you do
29  * not wish to do so, delete this exception statement from your version.
30  */
31
32 package mir.misc;
33
34 /**
35  * Title:
36  * Description:
37  * Copyright:    Copyright (c) 2002 Mir-coders
38  * @author $Author: mh $
39  * @version $Id: WebdbImage.java,v 1.6.4.2 2002/11/01 05:38:20 mh Exp $
40  */
41
42 import java.io.*;
43 import java.util.Vector;
44 import java.util.Random;
45 import javax.media.jai.*;
46 import com.sun.media.jai.codec.*;
47 import java.awt.image.renderable.ParameterBlock;
48
49 public class WebdbImage
50 {
51
52         // default values for scaling
53         private int               maxIconSize=120;
54         private int               maxImageSize=640;
55
56         private int               iconWidth;
57         private int               iconHeight;
58
59   Random r = new Random();
60
61         // internal representation of the image
62         private PlanarImage       planarImage;
63
64   // type of the image
65   private String _type;
66
67
68         // constructor
69   // takes a temporary file as a parameter
70         public WebdbImage(File f, String type)
71                 throws IOException
72         {
73     // It has to be a FileSeekableStream cause the image conversion
74     // needs to seek backwards.
75                 planarImage = JAI.create("stream",new FileSeekableStream(f));
76     _type = type;
77                 scaleImage();
78         }
79
80         // acc3ssor-methods
81   // must be run after scaleIcon()
82         public int getIconWidth() throws IOException {
83                 return iconWidth;
84         }
85
86   // must be run after scaleIcon()
87         public int getIconHeight() throws IOException {
88                 return iconHeight;
89         }
90
91         public int getImageWidth() {
92                 return (int)planarImage.getWidth();
93         }
94
95         public int getImageHeight() {
96                 return (int)planarImage.getHeight();
97         }
98
99         public void setImage(OutputStream outStream) {
100     JAI.create("encode", planarImage, outStream, _type, null);
101         }
102
103         public void setIcon(OutputStream outStream)
104                 throws IOException
105         {
106                 scaleIcon(outStream);
107         }
108
109         private void scaleImage()
110                 throws java.io.IOException
111         {
112                 if (maxImageSize>0 && ( getImageHeight()> maxImageSize|| getImageWidth() >maxImageSize))
113                 {
114                         float scale;
115       ParameterBlockJAI params = new ParameterBlockJAI("scale");
116       params.addSource(planarImage);
117                         if (getImageHeight() > getImageWidth())
118         scale = (float)maxImageSize / (float)getImageHeight();
119       else
120         scale = (float)maxImageSize / (float)getImageWidth();
121
122       params.setParameter("xScale", scale);
123       params.setParameter("yScale", scale);
124                         params.setParameter("xTrans",0.0F);
125                         params.setParameter("yTrans",0.0F);
126                         params.setParameter("interpolation",new InterpolationBilinear());
127                         planarImage = JAI.create("scale", params);
128                 }
129         }
130
131         private void scaleIcon(OutputStream outStream)
132                 throws java.io.IOException
133         {
134     float scale;
135     ParameterBlockJAI params = new ParameterBlockJAI("scale");
136     params.addSource(planarImage);
137     if (getImageHeight() > getImageWidth())
138       scale = (float)maxIconSize / (float)getImageHeight();
139     else
140       scale = (float)maxIconSize / (float)getImageWidth();
141
142     params.setParameter("xScale", scale);
143     params.setParameter("yScale", scale);
144     params.setParameter("xTrans",0.0F);
145     params.setParameter("yTrans",0.0F);
146     params.setParameter("interpolation",new InterpolationBilinear());
147     PlanarImage temp = JAI.create("scale", params);
148     JAI.create("encode", temp, outStream, _type, null);
149     iconWidth=temp.getWidth();
150     iconHeight=temp.getHeight();
151         }
152
153 }