Galera to com o seguinte problema estou tentando mudar as cores de cada pixel de uma imagem só que no processo padrão ele demorava um minuto por imagem e quando uso threads não funciona poderiam me ajudar para ver se tem algum erro no meu código da Thread pois quero que cada Thread murder a cor de um pixel
Como a thread é Chamada
private Bitmap test(File file) {
Bitmap src = BitmapFactory.decodeFile(file.getPath());
int width = src.getWidth();
int height = src.getHeight();
Bitmap bmOut = Bitmap.createBitmap(width, height, src.getConfig());
int A, R, G, B, pixel;
for (int x = 0; x < width; ++x) {
for (int y = 0; y < height; ++y) {
Teste a = new Teste(x, y, src);
a.start();
bmOut.setPixel(a.getX(), a.getY(), Color.argb(a.getA(), a.getGray(), a.getGray(), a.getGray()));
}
}
return bmOut;
}
Código da Thread
class Teste extends Thread {
int A, R, G, B, x, y, gray;
Bitmap src;
public Teste(int x, int y, Bitmap src) {
this.x = x;
this.y = y;
this.src = src;
}
public int getA() {
return A;
}
public int getGray() {
return gray;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public void caculo(int x, int y) {
int pixel = src.getPixel(x, y);
A = Color.alpha(pixel);
R = Color.red(pixel);
G = Color.green(pixel);
B = Color.blue(pixel);
int gray = (int) (0.2989 * R + 0.5870 * G + 0.1140 * B);
// use 128 as threshold, above -> white, below -> black
if (gray > 128) {
gray = 255;
} else {
gray = 0;
}
this.gray = gray;
}
@Override
public void run() {
super.run();
caculo(x, y);
}
}
Codigo do metodo padrão
private Bitmap test2(File file) {
Bitmap src = BitmapFactory.decodeFile(file.getPath());
int width = src.getWidth();
int height = src.getHeight();
Bitmap bmOut = Bitmap.createBitmap(width, height, src.getConfig());
int A, R, G, B;
int pixel;
for (int x = 0; x < width; ++x) {
for (int y = 0; y < height; ++y) {
pixel = src.getPixel(x, y);
A = Color.alpha(pixel);
R = Color.red(pixel);
G = Color.green(pixel);
B = Color.blue(pixel);
int gray = (int) (0.2989 * R + 0.5870 * G + 0.1140 * B);
if (gray > 128) {
gray = 255;
} else {
gray = 0;
}
bmOut.setPixel(x, y, Color.argb(A, gray, gray, gray));
}
}
return bmOut;
}