如何使用自定义滤镜增强应用亮度效果?

时间:2017-12-22 08:16:01

标签: android image-processing bitmap android-bitmap

我正在尝试添加自定义滤镜并添加亮度和对比度,但这需要花费很多时间 我怎样才能减少这些次数?
我们可以使用其他方式或在过滤器上添加过滤器吗?

//main class


private ImageView imgMain;
imgMain = (ImageView) findViewById(R.id.effect_main);
imgMain.setColorFilter(filterClass.setFilter(2));
Bitmap bitmap = ((BitmapDrawable)imgMain.getDrawable()).getBitmap();
bitmap =imgFilter.applyBrightnessEffect(bitmap , 150);
imgMain.setImageBitmap(bitmap);
  

用于自定义过滤器

//filter methords 
  public ColorMatrixColorFilter catNightFilter() {
            float[] matrix = {
                    89, 61, -5, 0, 0, //red
                    77, 67, 24, 0, 0, //green
                    -57, -13, 81, 0, 0, //blue
                    0, 0, 0, 0, 0 //alpha
            };
            ColorMatrix cm = new ColorMatrix(matrix);``
           return new ColorMatrixColorFilter(cm);
        }
  

此亮度代码需要花费很多时间来转换每个像素。

            // scan through all pixels
    //britness methord
     public  Bitmap applyBrightnessEffect(Bitmap src, int value) {
            // image size
            int width = src.getWidth();
            int height = src.getHeight();
            // create output bitmap
            Bitmap bmOut = Bitmap.createBitmap(width, height, src.getConfig());
            // color information
            int A, R, G, B;
            int pixel;
            for(int x = 0; x < width; ++x) {
                for(int y = 0; y < height; ++y) {
                    // get pixel color
                    pixel = src.getPixel(x, y);
                    A = Color.alpha(pixel);
                    R = Color.red(pixel);
                    G = Color.green(pixel);
                    B = Color.blue(pixel);

                    // increase/decrease each channel
                    R += value;
                    if(R > 255) { R = 255; }
                    else if(R < 0) { R = 0; }

                    G += value;
                    if(G > 255) { G = 255; }
                    else if(G < 0) { G = 0; }

                    B += value;
                    if(B > 255) { B = 255; }
                    else if(B < 0) { B = 0; }

                    // apply new pixel color to output bitmap
                    bmOut.setPixel(x, y, Color.argb(A, R, G, B));
                }
            }

            // return final image
            return bmOut;
        }

0 个答案:

没有答案