2014-10-22 102 views
0

我有一个Android应用程序,其中我使用下面的代码提高了图像的亮度。但是,这是非常缓慢的,所以没有人知道一个快速的方式来增强android中imageview的图像亮度。请记住,这是提高ImageView的亮度不是屏幕亮度以编程方式提高ImageView亮度

public static Bitmap doBrightness(Bitmap src, int value) { 
    //Log.e("Brightness", "Changing brightnhjh"); 

    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 i = 0; i < width; i=i++) { 
     for (int j = 0; j < height; j=j++) { 
      pixel = src.getPixel(i, j); 
      A = Color.alpha(pixel); 
      R = Color.red(pixel); 
      G = Color.green(pixel); 
      B = Color.blue(pixel); 
      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; 
      } 
      bmout.setPixel(i, j, Color.argb(A, R, G, B)); 
     } 
    } 
    return bmout; 

} 

这是ImageView的

imageview.setImageBitmap(doBrightness(image, 40)); 

回答

4

我有一个解决这个问题的工作,我让图像更明亮,然后在imageview中显示它。我使用的代码在下面给出:

foto.setColorFilter(brightIt(100));//foto is my ImageView 
//and below is the brightIt func 
public static ColorMatrixColorFilter brightIt(int fb) { 
ColorMatrix cmB = new ColorMatrix(); 
cmB.set(new float[] { 
    1, 0, 0, 0, fb, 
    0, 1, 0, 0, fb, 
    0, 0, 1, 0, fb, 
    0, 0, 0, 1, 0 }); 

ColorMatrix colorMatrix = new ColorMatrix(); 
colorMatrix.set(cmB); 
//Canvas c = new Canvas(b2); 
//Paint paint = new Paint(); 
ColorMatrixColorFilter f = new ColorMatrixColorFilter(colorMatrix); 
//paint.setColorFilter(f); 
return f; 
} 
+0

为什么要创建一个颜色矩阵,设置它,然后创建另一个颜色矩阵,并使用刚才设置的矩阵进行设置? – 2017-08-18 05:15:25

1

我不能确切记得在那里我得到这个从我却用这个(与负值获得深色的东西,把一些正值得到的东西亮)

drawable.setColorFilter(applyLightness(-30)); 


public static PorterDuffColorFilter applyLightness(int progress) 
{ 
    if (progress > 0) 
    { 
     int value = (int) progress * 255/100; 
     return new PorterDuffColorFilter(Color.argb(value, 255, 255, 255), Mode.SRC_OVER); 
    } 
    else 
    { 
     int value = (int) (progress * -1) * 255/100; 
     return new PorterDuffColorFilter(Color.argb(value, 0, 0, 0), Mode.SRC_ATOP); 
    } 
} 

编辑:发现在那里我把这个来自:Adjusting Lightness using ColorMatrix

+0

它确实亮,但没有接触整体RGB比率,图像看起来不真实。 – 2014-10-23 05:09:58

0

您可以在ImageView顶部放置一个半透明视图。如何:一个FrameView有两个孩子,第一个是ImageView,第二个是具有半透明背景的视图(只是视图)。然后,您将不得不以编程方式修改背景不透明度。

5

可以使用以下代码来增强图像:

public static Bitmap enhanceImage(Bitmap mBitmap, float contrast, float brightness) { 
    ColorMatrix cm = new ColorMatrix(new float[] 
     { 
      contrast, 0, 0, 0, brightness, 
      0, contrast, 0, 0, brightness, 
      0, 0, contrast, 0, brightness, 
      0, 0, 0, 1, 0 
     }); 
    Bitmap mEnhancedBitmap = Bitmap.createBitmap(mBitmap.getWidth(), mBitmap.getHeight(), mBitmap 
     .getConfig()); 
    Canvas canvas = new Canvas(mEnhancedBitmap); 
    Paint paint = new Paint(); 
    paint.setColorFilter(new ColorMatrixColorFilter(cm)); 
    canvas.drawBitmap(mBitmap, 0, 0, paint); 
    return mEnhancedBitmap; 
} 

注:
对比度:0至10 亮度:-255到255

相关问题