Subversion Repositories general

Compare Revisions

No changes between revisions

Ignore whitespace Rev 1275 → Rev 1276

/ResizeApplet/trunk/build.xml
0,0 → 1,52
<project name="ResizeApplet" default="deploy" basedir=".">
 
<property name="build.compiler" value="jikes"/>
 
<property name="src" location="src"/>
<property name="classes" location="classes"/>
<property name="classpath" value=""/>
<property name="target" location="target"/>
<property name="html" location="html"/>
<property name="lib" location="lib"/>
 
<target name="compile">
<mkdir dir="${classes}" />
 
<javac
srcdir="${src}"
destdir="${classes}"
classpath="${classpath}:${classes}"
debug="on"
extdirs="${lib}"
/>
</target>
 
<target name="deploy" depends="compile">
<!-- temp solution, should be used as jar directly -->
<unjar src="${lib}/jiu.jar" dest="classes">
<patternset>
<include name="net/**" />
</patternset>
</unjar>
 
<jar destfile="${target}/ResizeApplet.jar">
<fileset dir="${classes}" />
</jar>
 
<signjar jar="${target}/ResizeApplet.jar" alias="dev" storepass="password" />
 
<copy todir="${target}">
<fileset dir="${html}"/>
</copy>
</target>
 
<target name="clean">
<delete dir="${classes}"/>
<delete includeemptydirs="true">
<fileset dir="${target}" includes="**/*"/>
</delete>
</target>
 
<target name="all" depends="clean,deploy" />
 
</project>
/ResizeApplet/trunk/html/index.html
0,0 → 1,0
<applet archive=ResizeApplet.jar code=ak/resizeapplet/ResizeApplet.class width="400" height="200"></applet>
/ResizeApplet/trunk/lib/jiu.jar
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/ResizeApplet/trunk/src/ak/resizeapplet/ExtFileFilter.java
0,0 → 1,48
package ak.resizeapplet;
 
import java.util.Set;
import java.util.HashSet;
import java.io.File;
import javax.swing.filechooser.FileFilter;
 
public class ExtFileFilter extends FileFilter
{
private String description;
private Set extensions = new HashSet();
 
public ExtFileFilter(String description)
{
this.description = description;
}
 
public boolean accept(File f)
{
if(f == null) return false;
if(f.isHidden()) return false;
if(f.isDirectory()) return true;
 
String name = f.getName();
int pos = name.lastIndexOf('.');
String ext;
 
if(pos <= 0 || pos >= name.length()-1) {
ext = "";
}
else {
ext = name.substring(pos+1).toUpperCase();
}
 
return extensions.contains(ext);
}
 
public void addExtension(String ext)
{
extensions.add(ext.toUpperCase());
}
 
public String getDescription()
{
return description;
}
}
 
/ResizeApplet/trunk/src/ak/resizeapplet/ImageResizer.java
0,0 → 1,10
package ak.resizeapplet;
 
import java.awt.Image;
import java.awt.image.BufferedImage;
 
public interface ImageResizer
{
public BufferedImage resize(Image origin, int newWidth, int newHeight);
}
 
/ResizeApplet/trunk/src/ak/resizeapplet/ResizeApplet.java
0,0 → 1,144
package ak.resizeapplet;
 
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.util.*;
import java.io.*;
 
public class ResizeApplet extends JApplet
{
private final static int thumbnailWidth = 200;
private final static int thumbnailHeight = 150;
private JLabel fileLabel;
private JTextField fileField;
private JButton browseButton;
private JButton loadButton;
private JLabel imagePanel;
 
private ImageResizer resizer = new JiuResizer();
private ImageIcon thumbnail = new ImageIcon();
 
private void createGUI()
{
setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
 
fileLabel = new JLabel("File");
fileLabel.setDisplayedMnemonic('f');
c.gridx = 0; c.gridy = 0; c.weightx = 0.0; c.weighty = 0.0; c.fill = GridBagConstraints.NONE;
add(fileLabel, c);
 
fileField = new JTextField();
c.gridx = 1; c.gridy = 0; c.weightx = 0.7; c.weighty = 0.0; c.fill = GridBagConstraints.HORIZONTAL;
add(fileField, c);
fileLabel.setLabelFor(fileField);
 
browseButton = new JButton("Browse");
browseButton.setMnemonic('b');
browseButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
browseButtonClicked();
}
} );
c.gridx = 2; c.gridy = 0; c.weightx = 0.1; c.weighty = 0.0; c.fill = GridBagConstraints.HORIZONTAL;
add(browseButton, c);
 
loadButton = new JButton("Load");
loadButton.setMnemonic('l');
loadButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
loadButtonClicked();
}
} );
c.gridx = 3; c.gridy = 0; c.weightx = 0.1; c.weighty = 0.0; c.fill = GridBagConstraints.HORIZONTAL;
add(loadButton, c);
 
imagePanel = new JLabel();
imagePanel.setBorder(BorderFactory.createLineBorder(Color.black));
imagePanel.setMinimumSize(new Dimension(thumbnailWidth, thumbnailHeight));
imagePanel.setPreferredSize(new Dimension(thumbnailWidth, thumbnailHeight));
c.gridx = 0; c.gridy = 1; c.weightx = 0.0; c.weighty = 0.9; c.fill = GridBagConstraints.NONE;
c.gridwidth = 4;
add(imagePanel, c);
}
 
public void init()
{
try {
createGUI();
}
catch(Exception ex) {
System.err.println("Cannot create GUI: " + ex.getMessage());
}
}
 
private void browseButtonClicked()
{
try {
JFileChooser chooser = new JFileChooser();
ExtFileFilter filter = new ExtFileFilter("Images");
filter.addExtension("jpg");
filter.addExtension("jpeg");
filter.addExtension("gif");
chooser.setFileFilter(filter);
 
chooser.setSelectedFile(new File(fileField.getText()));
if(chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
fileField.setText(chooser.getSelectedFile().getAbsolutePath());
loadButtonClicked();
}
}
catch(Exception ex) {
JOptionPane.showMessageDialog(this, "Cannot browse files: " + ex.getMessage(),
"ResizeApplet", JOptionPane.ERROR_MESSAGE);
}
}
 
private void loadButtonClicked()
{
try {
thumbnail.setImage(
resizer.resize(loadImage(fileField.getText()), thumbnailWidth, thumbnailHeight));
imagePanel.setIcon(thumbnail);
}
catch(Exception ex) {
JOptionPane.showMessageDialog(this, "Cannot browse files: " + ex.getMessage(),
"ResizeApplet", JOptionPane.ERROR_MESSAGE);
}
}
 
private void sendToServer()
{
//javax.imageio.ImageIO.write(thumbnail.getImage(), "jpg", outputStream);
}
 
protected Image loadImage(String fileName)
throws Exception
{
Toolkit toolkit = Toolkit.getDefaultToolkit();
Image image = toolkit.createImage(fileName);
 
toolkit.prepareImage(image, -1, -1, null);
 
while(true) {
int status = toolkit.checkImage(image, -1, -1, null);
 
if((status & ImageObserver.ALLBITS) != 0) break;
if((status & ImageObserver.ERROR) != 0) throw new Exception("Cannot read the image");
 
try {
Thread.sleep(100);
}
catch(Exception ex) {
throw new Exception("Cannot read the image");
}
}
 
return image;
}
}
 
/ResizeApplet/trunk/src/ak/resizeapplet/JiuResizer.java
0,0 → 1,196
package ak.resizeapplet;
 
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.awt.image.PixelGrabber;
import java.awt.image.ImageObserver;
 
import net.sourceforge.jiu.data.BilevelImage;
import net.sourceforge.jiu.data.Gray8Image;
import net.sourceforge.jiu.data.MemoryRGB24Image;
import net.sourceforge.jiu.data.Paletted8Image;
import net.sourceforge.jiu.data.PixelImage;
import net.sourceforge.jiu.data.RGB24Image;
import net.sourceforge.jiu.data.RGBIndex;
import net.sourceforge.jiu.geometry.Resample;
 
public class JiuResizer
implements ImageResizer
{
protected static final int DEFAULT_ALPHA = 0xff000000;
protected static final int FILTER_TYPE = Resample.FILTER_TYPE_HERMITE;
/*
Possible type small, ms medium, ms quality
-----------------------------------------------------------
FILTER_TYPE_BOX 2.4 3.5 very bad
FILTER_TYPE_TRIANGLE 2.9 5.2
FILTER_TYPE_B_SPLINE 3.6 7.2
FILTER_TYPE_BELL 3.5 6.1
FILTER_TYPE_HERMITE 2.9 5.3
FILTER_TYPE_LANCZOS3 4.7 9.7 the best
FILTER_TYPE_MITCHELL 3.6 7.1
*/
 
public JiuResizer()
{
}
 
public BufferedImage resize(Image origin, int newWidth, int newHeight)
{
try {
RGB24Image image = convertImageToRGB24Image(origin);
Resample resample;
 
if(image == null) return null;
if(image.getWidth() == newWidth && image.getHeight() == newHeight)
return convertToAwtImage(image, DEFAULT_ALPHA);
 
resample = new Resample();
resample.setInputImage(image);
resample.setSize(newWidth, newHeight);
resample.setFilter(FILTER_TYPE);
resample.process();
 
return convertToAwtImage(resample.getOutputImage(), DEFAULT_ALPHA);
}
catch(Exception ex) {
throw new RuntimeException(ex.getMessage());
}
}
 
protected static BufferedImage convertToAwtImage(PixelImage image, int alpha)
{
if (image == null)
{
return null;
}
if (image instanceof RGB24Image)
{
return convertToAwtImage((RGB24Image)image, alpha);
}
else
if (image instanceof Gray8Image)
{
return null; //convertToAwtImage((Gray8Image)image, alpha);
}
else
if (image instanceof Paletted8Image)
{
return null; //convertToAwtImage((Paletted8Image)image, alpha);
}
else
if (image instanceof BilevelImage)
{
return null; //convertToAwtImage((BilevelImage)image, alpha);
}
else
{
return null;
}
}
 
protected static BufferedImage convertToAwtImage(RGB24Image image, int alpha)
{
if (image == null)
{
return null;
}
 
int width = image.getWidth();
int height = image.getHeight();
if (width < 1 || height < 1)
{
return null;
}
 
int[] pixels = new int[width];
byte[] red = new byte[width];
byte[] green = new byte[width];
byte[] blue = new byte[width];
 
BufferedImage newImage = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
 
for (int y = 0; y < height; y++)
{
image.getByteSamples(RGBIndex.INDEX_RED, 0, y, width, 1, red, 0);
image.getByteSamples(RGBIndex.INDEX_GREEN, 0, y, width, 1, green, 0);
image.getByteSamples(RGBIndex.INDEX_BLUE, 0, y, width, 1, blue, 0);
convertFromRGB24(red, 0, green, 0, blue, 0, alpha, pixels, 0, width);
 
for(int x = 0; x < width; x++)
newImage.setRGB(x, y, pixels[x]);
}
 
return newImage;
}
 
protected static void convertFromRGB24(
byte[] srcRed, int srcRedOffset,
byte[] srcGreen, int srcGreenOffset,
byte[] srcBlue, int srcBlueOffset,
int alpha,
int[] dest, int destOffset,
int num)
{
while (num-- > 0)
{
dest[destOffset++] =
alpha |
(srcBlue[srcBlueOffset++] & 0xff) |
((srcGreen[srcGreenOffset++] & 0xff) << 8) |
((srcRed[srcRedOffset++] & 0xff) << 16);
}
}
 
/**
* Creates an {@link RGB24Image} from the argument AWT image instance.
* @param image AWT image object to be converted to a {@link RGB24Image}
* @return a {@link RGB24Image} object holding the
* image data from the argument image
*/
protected static RGB24Image convertImageToRGB24Image(Image image)
{
if (image == null)
{
return null;
}
int width = image.getWidth(null);
int height = image.getHeight(null);
if (width < 1 || height < 1)
{
return null;
}
int[] pixels = new int[width * height];
PixelGrabber pg = new PixelGrabber(
image, 0, 0, width, height, pixels, 0, width);
 
try
{
pg.grabPixels();
}
catch (InterruptedException e)
{
return null;
}
if ((pg.getStatus() & ImageObserver.ABORT) != 0)
{
//System.err.println("image fetch aborted or errored");
return null;
}
RGB24Image result = new MemoryRGB24Image(width, height);
int offset = 0;
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
int pixel = pixels[offset++] & 0xffffff;
result.putSample(RGBIndex.INDEX_RED, x, y, pixel >> 16);
result.putSample(RGBIndex.INDEX_GREEN, x, y, (pixel >> 8) & 0xff);
result.putSample(RGBIndex.INDEX_BLUE, x, y, pixel & 0xff);
}
}
return result;
}
}
 
/ResizeApplet/trunk/.
Property changes:
Added: svn:ignore
+target
+classes
+