Mam nastepujacy problem ze zwolnieniem objektu pliku w aplecie
Tworze objekt klasy , ktora slozy do zmiany rozdzielczości pliku -(ponizej podam jej kod) wstandardowy sposob:
ImageManipulation rozdz = new ImageManipulation();
rozdz.zmien_rozdzielczosc("plik.jpg");
po wykonaniu tej kalasy program jeszcze sie nie konczy - jednak nie zwalnia mi sie plik.jpg - gdy chce go usunac w systmie mam komunikat ze plik jest zajety przez program. W zaden sposob nie moge go zwolnic ani usunac - nie dzilaja tez funkcje usuwania pliku.
probowalem:
rozdz=null
System.gc
ale nic nie pomoglo
Proszę o pomoc
Ponizej kalsa ImageManipulation
import java.awt.;
import java.awt.image.;
import java.io.;
import java.net.;
import javax.imageio.*;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.awt.Image;
import java.io.File;
import java.io.FileOutputStream;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.metadata.IIOMetadata;
import javax.imageio.stream.FileImageInputStream;
import javax.swing.ImageIcon;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
public class ImageManipulation {
public void zmien_rozdzielczosc(String nazwa_pl) throws Exception {
File infile = new File(nazwa_pl);
File outfile = new File("c:/plik/pr/pliki_po_konwersji/"+nazwa_pl);
ImageReader reader = ImageIO.getImageReadersByFormatName("jpeg").next();
reader.setInput(new FileImageInputStream(infile), true, false);
IIOMetadata data = reader.getImageMetadata(0);
BufferedImage image = reader.read(0);
int a = image.getWidth(null);
int b = image.getHeight(null);
int w = 600, h = -1;
if (a>b){
w = 600;
h = -1;}
if (b>a){
w = -1;
h = 900;}
Image rescaled = image.getScaledInstance(w, h, Image.SCALE_AREA_AVERAGING);
BufferedImage output = toBufferedImage(rescaled, BufferedImage.TYPE_INT_RGB);
FileOutputStream fos = new FileOutputStream(outfile);
JPEGImageEncoder jpegEncoder = JPEGCodec.createJPEGEncoder(fos);
JPEGEncodeParam jpegEncodeParam = jpegEncoder.getDefaultJPEGEncodeParam(output);
jpegEncodeParam.setDensityUnit(JPEGEncodeParam.DENSITY_UNIT_DOTS_INCH);
jpegEncodeParam.setXDensity(300);
jpegEncodeParam.setYDensity(300);
jpegEncoder.encode(output, jpegEncodeParam);
fos.close();
}
public static BufferedImage toBufferedImage(Image image, int type) {
int w = image.getWidth(null);
int h = image.getHeight(null);
BufferedImage result = new BufferedImage(w, h, type);
Graphics2D g = result.createGraphics();
g.drawImage(image, 0, 0, null);
g.dispose();
return result;
}
}