Danke! Kann ich mit der gleichen Vorgehensweise ueber getRaster() Blurring erreichen?
Ich habe in einer meiner Anwendungen folgendermaßen ein Blurring realisiert (eine gute Anleitung findet sich in dem Buch "Filthy Rich Clients"):
[Java]
int filterwidth = ... // Je größer der Wert, desto stärker der Filter.
BufferedImage image = ... // Dein Bild, das Du filtern willst.
// Warum der Filter in zwei einzelne Filter unterteilt wird, lies bitte in dem angegebenen Buch nach. Die Wirkung ist die gleiche wie in einem Durchgang, es geht aber schneller.
image = getGaussianBlurFilter(filterwidth, true).filter(image, null);
image = getGaussianBlurFilter(filterwidth, false).filter(image, null);
public static ConvolveOp getGaussianBlurFilter(int radius, boolean horizontal) {
if (radius < 1) {
throw new IllegalArgumentException("Radius must be >= 1");
}
int size = radius * 2 + 1;
float[] data = new float[size];
float sigma = radius / 3.0f;
float twoSigmaSquare = 2.0f * sigma * sigma;
float sigmaRoot = (float)
Math.sqrt(twoSigmaSquare * Math.PI);
float total = 0.0f;
for (int i = -radius; i <= radius; i++) {
float distance = i * i;
int index = i + radius;
data[index] = (float) Math.exp(-distance / twoSigmaSquare) / sigmaRoot;
total += data[index];
}
for (int i = 0; i < data.length; i++) {
data
/= total;
}
Kernel kernel = null;
if (horizontal) {
kernel = new Kernel(size, 1, data);
} else {
kernel = new Kernel(1, size, data);
}
return new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null);
}
[/Java]
Ralf