package jp.crwdev.app.container;
import java.awt.Dimension;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.InputStream;
import jp.crwdev.app.BufferedImageIO;
import jp.crwdev.app.constant.Constant;
import jp.crwdev.app.interfaces.IImageFileInfo;
import jp.crwdev.app.interfaces.IImageFileInfoList;
import jp.crwdev.app.interfaces.IImageFileWriter;
import jp.crwdev.app.interfaces.IImageFilter;
public class ImageFilePreconverter implements IImageFileWriter {
/** 画像フィルタ */
private IImageFilter mBaseFilter = null;
/** 処理中断フラグ */
private boolean mIsCancel = false;
/** 画像サイズ */
private Dimension mUnionSize = new Dimension();
/**
* コンストラクタ
*/
public ImageFilePreconverter(){
}
/**
* コンストラクタ
* @param filter 画像フィルタ
*/
public ImageFilePreconverter(IImageFilter filter){
setImageFilter(filter);
}
public Dimension getUnionSize(){
return mUnionSize;
}
@Override
public boolean open(String filepath) {
return false;
}
@Override
public void setImageFilter(IImageFilter filter) {
mBaseFilter = filter;
}
@Override
public boolean write(IImageFileInfoList list, OnProgressListener listener) {
mIsCancel = false;
if(listener != null){
listener.onProgress(0, null);
}
int size = list.size();
float progressOffset = 100 / (float)size;
for(int i=0; i<size; i++){
if(mIsCancel){
return false;
}
IImageFileInfo info = list.get(i);
if(info.getFilterParam().getPageSpread().equals(Constant.PAGESPREAD_CENTER)){
// ignore centering image
continue;
}
BufferedImage image = null;
synchronized(info){
if(!info.isEnable()){
continue;
}
InputStream in = info.getInputStream();
if(in != null){
image = BufferedImageIO.read(in, info.isJpeg());
}
else{
image = info.getImage(true);
}
if(mBaseFilter != null){
image = mBaseFilter.filter(image, info.getFilterParam());
}
try {
if(in != null){
in.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(image != null){
int width = image.getWidth();
int height = image.getHeight();
if(mUnionSize.width < width){
mUnionSize.width = width;
}
if(mUnionSize.height < height){
mUnionSize.height = height;
}
}
if(listener != null){
listener.onProgress((int)((i+1)*progressOffset), null);
}
}
return true;
}
@Override
public void cancel() {
mIsCancel = true;
}
@Override
public String getSuffix() {
return "";
}
@Override
public void close() {
}
}