2D-Grafik ConvolveOp stativ vs dynamic?

lumo

Top Contributor
Hallo

ich nage gerade an folgendem:
ich habe eine statische funktion die ein bild unscharf macht:
Java:
public void blur(BufferedImage src, BufferedImage dst) {
		float data[] = {//
				0.111f, 0.111f, 0.111f, //
				0.111f, 0.111f, 0.111f, //
				0.111f, 0.111f, 0.111f //
		};
		Kernel kernel = new Kernel(3, 3, data);
		ConvolveOp convolve = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP,
				null);

		convolve.filter(src, dst);
	}
klappt bestens. etzt wollte ich die selbe funktion umschreiben dass ich die größe des filters definieren kann (zum testen hab ich mal die selbe größe wie beim statischen verwendet (und den parameter noch weggelassen!)

Java:
public void blur(BufferedImage src, BufferedImage dst) {
		int kernelSize = 3;
		int weight = kernelSize * kernelSize;
		float[] data = new float[weight];
		for (int i = 0; i < data.length; i++) {
			data[i] = 1 / weight;
		}
		Kernel kernel = new Kernel(kernelSize, kernelSize, data);
		ConvolveOp convolve = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP,
				null);
		convolve.filter(src, dst);
	}

wenn ich jedoch zweiteres verwende wirfts ne exception!
Java:
java.awt.image.ImagingOpException: Unable to convolve src image
	at java.awt.image.ConvolveOp.filter(Unknown Source)
	etc...
warum?!?
 

Flown

Administrator
Mitarbeiter
Versuchs mal mit:

Java:
for (int i = 0; i < data.length; i++) {
            data[i] = 1f / (float)weight;
        }

[EDIT]Ahja, zu deinem warum: Weil in deinem data-Array nur 0.0 stehen[/EDIT]
 

X5-599

Top Contributor
Mein Tip wäre:
Java:
data[i] = 1 / weight;

sorgt dafür, dass überall 0.0 im data Array steht. So müsste es gehen:

Java:
data[i] = (float)1 / weight;
 

Ähnliche Java Themen

Neue Themen


Oben