2014-10-22 144 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

相關問題