package jp.crwdev.app.imagefilter;
import java.awt.image.BufferedImage;
import java.awt.image.ConvolveOp;
import java.awt.image.Kernel;
import jp.crwdev.app.interfaces.IImageFilter;
public class BlurFilter implements IImageFilter {
private boolean mIsBlur = true;
public BlurFilter(boolean blur){
mIsBlur = blur;
}
@Override
public BufferedImage filter(BufferedImage image, ImageFilterParam param) {
if((mIsBlur && !param.isBlur()) || (!mIsBlur && !param.isSharpness())){
return image;
}
BufferedImage dest = new BufferedImage(image.getWidth(), image.getHeight(), image.getType());
if(mIsBlur){
float[] blur5x5 = {
1, 4, 6, 4, 1,
4, 16, 24, 16, 4,
6, 24, 36, 24, 6,
4, 16, 24, 16, 4,
1, 4, 6, 4, 1,
};
float total = 0.0f;
for(int i=0; i<blur5x5.length; i++){
total += blur5x5[i];
}
for(int i=0; i<blur5x5.length; i++){
blur5x5[i] = blur5x5[i] / total;
}
Kernel blurKernel = new Kernel(5, 5, blur5x5);
ConvolveOp blurOp = new ConvolveOp(blurKernel, ConvolveOp.EDGE_NO_OP, null);
blurOp.filter(image, dest); // ぼかし
}
else{
float level = param.getSharpnessPixels();
float slant = level * -0.02f;
float side = slant * 2.0f;
float aroundValue = side*4 + slant*4;
float centerValue = 1.0f - aroundValue;
float[] sharp = {slant, side, slant,
side, centerValue, side,
slant, side, slant};
// float[] sharp = {-0.06f, -0.11f, -0.06f, //operator[1] 鮮鋭化
// -0.11f, 1.68f, -0.11f,
// -0.06f, -0.11f, -0.06f};
// float[] sharp = {0.0f,-1.0f,0.0f,-1.0f,5.0f,-1.0f,0.f,-1.0f,0.0f};
Kernel sharpKernel = new Kernel(3, 3, sharp);
ConvolveOp sharpOp = new ConvolveOp(sharpKernel, ConvolveOp.EDGE_NO_OP, null);
sharpOp.filter(image, dest); // シャープ
}
return dest;
}
}