/* エッジ強調 ImageFilter Ver 0.10 */ /* */ /* */ /* by Atsushi 98/4/9 */ package net.antun.lib.awt.image; import java.awt.Dimension; import java.awt.image.ColorModel; public class EmphasisImageFilter extends SinglepassImageFilter { /* --- Field --- */ private double strength; /* --- Constructor --- */ public EmphasisImageFilter(double strength) { this.strength=strength; } /* --- フィルタリング --- */ public void setDimensions(int width,int height) { super.setDimensions(width,height); consumer.setDimensions(width,height); } protected void filterImage() { int rgb,p[]; int r,g,b,a,r0,g0,b0,a0; p=new int[originalSize.width]; for (int y=0;y<=originalSize.height-1;y++) { for (int x=0;x<=originalSize.width-1;x++) { rgb=original[x+y*originalSize.width]; a=a0=(rgb>>24) & 0xff; r=r0=(rgb>>16) & 0xff; g=g0=(rgb>> 8) & 0xff; b=b0=(rgb>> 0) & 0xff; for (int ix=-1;ix<=1;ix++) { for (int iy=-1;iy<=1;iy++) { if (0<=x+ix && x+ix>24) & 0xff))*strength); r+=(int)((r0-((rgb>>16) & 0xff))*strength); g+=(int)((g0-((rgb>> 8) & 0xff))*strength); b+=(int)((b0-((rgb>> 0) & 0xff))*strength); } } } a=Math.min(Math.max(a,0),255); r=Math.min(Math.max(r,0),255); g=Math.min(Math.max(g,0),255); b=Math.min(Math.max(b,0),255); p[x]=(a<<24) | (r<<16) | (g<<8) | (b<<0); } consumer.setPixels(0,y,originalSize.width,1,defaultRGB, p,0,originalSize.width); } } public void setHints(int hint) { consumer.setHints(TOPDOWNLEFTRIGHT | COMPLETESCANLINES | SINGLEPASS | (hint & SINGLEFRAME)); } /* --- 文字列化 --- */ public String toString() { return getClass().getName()+"[strength="+strength+"]"; } }