X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=source%2Fmir%2Fmisc%2FWebdbImage.java;h=4e61947b12a57abf39ad95119299e825fc3071e2;hb=d388c9c6286a9d9dda70e05535d5321fc20ef1c8;hp=5a2936a5cb4d91751fe366016221e442227b826d;hpb=c6a2204d8d75293256fd17c07e54971d7672359a;p=mir.git diff --git a/source/mir/misc/WebdbImage.java b/source/mir/misc/WebdbImage.java index 5a2936a5..4e61947b 100755 --- a/source/mir/misc/WebdbImage.java +++ b/source/mir/misc/WebdbImage.java @@ -1,3 +1,34 @@ +/* + * Copyright (C) 2001, 2002 The Mir-coders group + * + * This file is part of Mir. + * + * Mir is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * Mir is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Mir; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * In addition, as a special exception, The Mir-coders gives permission to link + * the code of this program with the com.oreilly.servlet library, any library + * licensed under the Apache Software License, The Sun (tm) Java Advanced + * Imaging library (JAI), The Sun JIMI library (or with modified versions of + * the above that use the same license as the above), and distribute linked + * combinations including the two. You must obey the GNU General Public + * License in all respects for all of the code used other than the above + * mentioned libraries. If you modify this file, you may extend this exception + * to your version of the file, but you are not obligated to do so. If you do + * not wish to do so, delete this exception statement from your version. + */ + package mir.misc; /** @@ -10,6 +41,7 @@ package mir.misc; */ import java.io.*; +import java.util.Vector; import javax.media.jai.*; import com.sun.media.jai.codec.*; import java.awt.image.renderable.ParameterBlock; @@ -29,33 +61,38 @@ public class WebdbImage // internal representation of the image private PlanarImage planarImage; + // type of the image + private String _type; + // constructor - public WebdbImage(byte[] image) + public WebdbImage(byte[] image, String type) throws IOException { planarImage = JAI.create("stream",new ByteArraySeekableStream(image)); + _type = type; scaleImage(); } - public WebdbImage(byte[] image, int iconMax) + public WebdbImage(byte[] image, String type, int iconMax) throws IOException { maxIconSize=iconMax; planarImage = JAI.create("stream",new ByteArraySeekableStream(image)); + _type = type; scaleImage(); } - public WebdbImage(byte[] image, int iconMax, int imageMax) + public WebdbImage(byte[] image, String type, int iconMax, int imageMax) throws IOException { maxIconSize=iconMax; maxImageSize=imageMax; planarImage = JAI.create("stream",new ByteArraySeekableStream(image)); + _type = type; scaleImage(); } - // acc3ssor-methods public int getIconWidth() throws IOException { if (iconData==null) scaleIcon(); @@ -78,8 +115,7 @@ public class WebdbImage public byte[] getImage() { if (imageData==null) { ByteArrayOutputStream outStream = new ByteArrayOutputStream(); - // @todo the choice of PNG or JPEG should be made configurable - JAI.create("encode", planarImage, outStream, "PNG", null); + JAI.create("encode", planarImage, outStream, _type, null); imageData = outStream.toByteArray(); } return imageData; @@ -97,32 +133,45 @@ public class WebdbImage { if (maxImageSize>0 && ( getImageHeight()> maxImageSize|| getImageWidth() >maxImageSize)) { + System.out.println("SCALE_IMAGE"); float scale; + ParameterBlockJAI params = new ParameterBlockJAI("scale"); + params.addSource(planarImage); if (getImageHeight() > getImageWidth()) - scale = (float)maxImageSize / (float)getImageHeight(); - else - scale = (float)maxImageSize / (float)getImageWidth(); - - InterpolationBilinear interp = new InterpolationBilinear(); - planarImage = JAI.create("scale", planarImage, scale, scale, 0.0F, 0.0F, interp); + scale = (float)maxImageSize / (float)getImageHeight(); + else + scale = (float)maxImageSize / (float)getImageWidth(); + + params.setParameter("xScale", scale); + params.setParameter("yScale", scale); + params.setParameter("xTrans",0.0F); + params.setParameter("yTrans",0.0F); + params.setParameter("interpolation",new InterpolationBilinear()); + planarImage = JAI.create("scale", params); } } private void scaleIcon() throws java.io.IOException { + System.out.println("SCALE_ICON"); if (iconData==null) { float scale; + ParameterBlockJAI params = new ParameterBlockJAI("scale"); + params.addSource(planarImage); if (getImageHeight() > getImageWidth()) - scale = (float)maxIconSize / (float)getImageHeight(); - else - scale = (float)maxIconSize / (float)getImageWidth(); - - InterpolationBilinear interp = new InterpolationBilinear(); - PlanarImage temp = JAI.create("scale", planarImage, scale, scale, 0.0F, 0.0F, interp); + scale = (float)maxIconSize / (float)getImageHeight(); + else + scale = (float)maxIconSize / (float)getImageWidth(); + + params.setParameter("xScale", scale); + params.setParameter("yScale", scale); + params.setParameter("xTrans",0.0F); + params.setParameter("yTrans",0.0F); + params.setParameter("interpolation",new InterpolationBilinear()); + PlanarImage temp = JAI.create("scale", params); ByteArrayOutputStream outStream = new ByteArrayOutputStream(); - // @todo the choice of PNG or JPEG should be made configurable - JAI.create("encode", temp, outStream, "PNG", null); + JAI.create("encode", temp, outStream, _type, null); iconData = outStream.toByteArray(); iconWidth=temp.getWidth(); iconHeight=temp.getHeight();