/** * 余白除去フィルタ */ package jp.crwdev.app.imagefilter; import java.awt.Color; import java.awt.Graphics2D; import java.awt.Image; import java.awt.image.BufferedImage; import jp.crwdev.app.constant.Constant; import jp.crwdev.app.interfaces.IImageFilter; public class CropFilter implements IImageFilter { /** 全ページモードフラグ */ private boolean mIsFullPageMode; /** 除去領域表示フラグ */ //private boolean mIsDisplayCropArea = true; /** * コンストラクタ * @param fullPage true:FullPageCropパラメータを使用してCropが実行される * false:TextPageCrop or PictPageCropパラメータを使用してCropが実行される */ public CropFilter(boolean fullPage){ mIsFullPageMode = fullPage; } @Override public BufferedImage filter(BufferedImage image, ImageFilterParam param) { if(param == null){ return image; } if(!mIsFullPageMode && !param.isTextPageCrop() && !param.isPictPageCrop() && !param.isColorPageCrop()){ return image; } else if(mIsFullPageMode && !param.isFullPageCrop()){ return image; } int width = image.getWidth(); int height = image.getHeight(); int topLine = 0; int leftLine = 0; int subWidth = 0; int subHeight = 0; if(!mIsFullPageMode){ if(param.getConvertPageType() == Constant.PAGETYPE_PICT){ if(param.isPictPageCrop()){ topLine = param.getPictPageCropTop(); leftLine = param.getPictPageCropLeft(); subWidth = width - param.getPictPageCropLeft() - param.getPictPageCropRight(); subHeight = height - param.getPictPageCropTop() - param.getPictPageCropBottom(); if(param.isPreview() && param.isDrawCropAreaInPreview() && param.isFullPageCrop()){ topLine += param.getFullPageCropTop(); leftLine += param.getFullPageCropLeft(); subWidth -= param.getFullPageCropLeft() + param.getFullPageCropRight(); subHeight -= param.getFullPageCropTop() + param.getFullPageCropBottom(); } } else{ return image; } } else if(param.getConvertPageType() == Constant.PAGETYPE_COLOR){ if(param.isColorPageCrop()){ topLine = param.getColorPageCropTop(); leftLine = param.getColorPageCropLeft(); subWidth = width - param.getColorPageCropLeft() - param.getColorPageCropRight(); subHeight = height - param.getColorPageCropTop() - param.getColorPageCropBottom(); if(param.isPreview() && param.isDrawCropAreaInPreview() && param.isFullPageCrop()){ topLine += param.getFullPageCropTop(); leftLine += param.getFullPageCropLeft(); subWidth -= param.getFullPageCropLeft() + param.getFullPageCropRight(); subHeight -= param.getFullPageCropTop() + param.getFullPageCropBottom(); } } else{ return image; } } else{ if(param.isTextPageCrop()){ topLine = param.getTextPageCropTop(); leftLine = param.getTextPageCropLeft(); subWidth = width - param.getTextPageCropLeft() - param.getTextPageCropRight(); subHeight = height - param.getTextPageCropTop() - param.getTextPageCropBottom(); if(param.isPreview() && param.isDrawCropAreaInPreview() && param.isFullPageCrop()){ topLine += param.getFullPageCropTop(); leftLine += param.getFullPageCropLeft(); subWidth -= param.getFullPageCropLeft() + param.getFullPageCropRight(); subHeight -= param.getFullPageCropTop() + param.getFullPageCropBottom(); } } else{ return image; } } } else{ if(param.isFullPageCrop()){ topLine = param.getFullPageCropTop(); leftLine = param.getFullPageCropLeft(); subWidth = width - param.getFullPageCropLeft() - param.getFullPageCropRight(); subHeight = height - param.getFullPageCropTop() - param.getFullPageCropBottom(); } } if(topLine < 0 || subHeight < 0 || leftLine < 0 || subWidth < 0){ return image; } if(param.isPreview()){ if(param.isDrawCropAreaInPreview()){ //元データを保護するため新しいImageを作成する BufferedImage dest = new BufferedImage(width, height, image.getType()); Graphics2D g2 = dest.createGraphics(); g2.drawImage((Image)image,0,0,null); // BufferedImageに描画させる g2.setColor(Color.BLACK); g2.drawRect(leftLine, topLine, subWidth, subHeight); g2.dispose(); return dest; //Graphics2D g2 = image.createGraphics(); //g2.setColor(Color.BLACK); //g2.drawRect(leftLine, topLine, subWidth, subHeight); //g2.dispose(); //return image; } //else{ // return image; //} } return image.getSubimage(leftLine, topLine, subWidth, subHeight); } }