Garmaine Staff asked 2 years ago

I'm getting an Image and convert it into a Bitmap. To check if the color of a pixel is between two values, I iterate through every single pixel of the given Bitmap. I create a new Bitmap, change the pixel if it is between these values and set.Pixel() on the new Bitmap, or leave the Pixel as it is and set it also on the new Bitmap. I reduced the Bitmap.Config from ARGB-8888 to RGB_565 but it is still unbeleavable slow and shows in debug "The application may be doing too much work on its main thread."

Is there a better way to do that and make the app faster?

 width = bitmap.getWidth();
        heigth = bitmap.getHeight();
        Bitmap newBitmap = Bitmap.createBitmap(width, heigth, Bitmap.Config.RGB_565);

        for(int x = 0; x < width; x++){
            for(int y = 0; y < heigth; y++){
                int pixel = bitmap.getPixel(x,y);
                float[] pixelHue = getHsv(pixel);
                if(pixelHue[0] > 170 && pixelHue[0] < 250 ){
                 //Change the Pixel
                    pixelHue[0] = pixelHue[0] - 17;
                    int newColor = setRgb(pixelHue);
                    newBitmap.setPixel(x, y, newColor);
                      //leave the Pixel as it is
                    newBitmap.setPixel(x, y, pixel);

        return newBitmap;