[英]How to sharpen a image in android?
我想要銳化圖像,我的代碼如下:
public Bitmap RuiHuaBitmap(Bitmap bitmap) {
int width, height;
height = bitmap.getHeight();
width = bitmap.getWidth();
int red, green, blue;
int a1, a2, a3, a4, a5, a6, a7, a8, a9;
Bitmap bmpBlurred = Bitmap.createBitmap(width, height,bitmap.getConfig());
Canvas canvas = new Canvas(bmpBlurred);
canvas.drawBitmap(bitmap, 0, 0, null);
for (int i = 1; i < width - 1; i++) {
for (int j = 1; j < height - 1; j++) {
a1 = bitmap.getPixel(i - 1, j - 1);
a2 = bitmap.getPixel(i - 1, j);
a3 = bitmap.getPixel(i - 1, j + 1);
a4 = bitmap.getPixel(i, j - 1);
a5 = bitmap.getPixel(i, j);
a6 = bitmap.getPixel(i, j + 1);
a7 = bitmap.getPixel(i + 1, j - 1);
a8 = bitmap.getPixel(i + 1, j);
a9 = bitmap.getPixel(i + 1, j + 1);
red = (Color.red(a1) + Color.red(a2) + Color.red(a3) + Color.red(a4) + Color.red(a6) + Color.red(a7) + Color.red(a8) + Color.red(a9)) *(-1) + Color.red(a5)*9 ;
green = (Color.green(a1) + Color.green(a2) + Color.green(a3) + Color.green(a4) + Color.green(a6) + Color.green(a7) + Color.green(a8) + Color.green(a9)) *(-1) + Color.green(a5)*9 ;
blue = (Color.blue(a1) + Color.blue(a2) + Color.blue(a3) + Color.blue(a4) + Color.blue(a6) + Color.blue(a7) + Color.blue(a8) + Color.blue(a9)) *(-1) + Color.blue(a5)*9 ;
bmpBlurred.setPixel(i, j, Color.rgb(red, green, blue));
}
}
return bmpBlurred;
}
但我無法達到理想的效果。 有人可以提供更多線索,或者告訴我代碼中的錯誤是什么?
謝謝。
您缺少對傳遞給Color.rgb()的rgb值的范圍檢查; 在調用Color.rgb()方法之前,需要規范化[0..255]范圍內的rgb值:
public static int rgb(int red,int green,int blue)從:API Level 1
從紅色,綠色,藍色組件返回color-int。 alpha分量是重要的255(完全不透明)。 這些組件值應為[0..255], 但未執行范圍檢查,因此如果它們超出范圍,則返回的顏色未定義 。 參數紅色紅色分量[0..255]顏色綠色綠色分量[0..255]顏色藍色藍色分量[0..255]顏色
你的卷積矩陣看起來很適合變形:
0 0 0 0 0
0 -1 -1 -1 0
0 -1 9 -1 0
0 -1 -1 -1 0
0 0 0 0 0
如果您認為效果太強,您還可以嘗試:
0 0 0 0 0
0 0 -1 0 0
0 -1 5 -1 0
0 0 -1 0 0
0 0 0 0 0
作為備選
red = (Color.red(a1) + (Color.red(a2))*(-1) + Color.red(a3) +
(Color.red(a4))*(-1) + (Color.red(a6))*(-1) + Color.red(a7) +
(Color.red(a8))*(-1) + Color.red(a9)) + Color.red(a5)*5 ;
if(red < 0 )
red = 0;
if(red > 255)
red = 255;
green = (Color.green(a1) + (Color.green(a2)) *(-1) + Color.green(a3) +
(Color.green(a4)) *(-1) + (Color.green(a6))*(-1) + Color.green(a7) +
(Color.green(a8))*(-1) + Color.green(a9)) + Color.green(a5)*5 ;
if(green < 0 )
green = 0;
if(green > 255)
green = 255;
blue = (Color.blue(a1) + (Color.blue(a2))*(-1) + Color.blue(a3) +
(Color.blue(a4))*(-1) + (Color.blue(a6))*(-1) + Color.blue(a7) +
(Color.blue(a8)) *(-1) + Color.blue(a9)) + Color.blue(a5)*5 ;
if(blue < 0 )
blue = 0;
if(blue > 255)
blue = 255;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.