本人做了一個圖片瀏覽器,用了一些影像處理的演算法,這個是一部分,APK安裝包地址:http://static.apk.hiapk.com/html/2012/08/797656.html,歡迎下載和反饋;
關於android系統映像特效處理之光照效果
public static Bitmap sunshine(SoftReference<Bitmap> bmp) { final int width = bmp.get().getWidth(); final int height = bmp.get().getHeight(); Log.d("sunshine", "sunshine:width"+width+"height:"+height); Bitmap bitmap = (Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565)); int pixR = 0; int pixG = 0; int pixB = 0; int pixColor = 0; int newR = 0; int newG = 0; int newB = 0; int centerX = width / 2; int centerY = height / 2; int radius = Math.min(centerX, centerY); final float strength = 150F; // 光照強度 100~150 int[] pixels = new int[width * height]; bmp.get().getPixels(pixels, 0, width, 0, 0, width, height); int pos = 0; // bmp.recycle();// bmp = null; for (int i = 1, length = height - 1; i < length; i++) { for (int k = 1, len = width - 1; k < len; k++) { pos = i * width + k; pixColor = pixels[pos]; pixR = Color.red(pixColor); pixG = Color.green(pixColor); pixB = Color.blue(pixColor); newR = pixR; newG = pixG; newB = pixB; // 計算當前點到光照中心的距離,平面座標系中求兩點之間的距離 v int distance = (int) (Math.pow((centerY - i), 2) + Math.pow(centerX - k, 2)); if (distance < radius * radius) { // 按照距離大小計算增加的光照值 int result = (int) (strength * (1.0 - Math.sqrt(distance) / radius)); newR = pixR + result; newG = pixG + result; newB = pixB + result; } newR = Math.min(255, Math.max(0, newR)); newG = Math.min(255, Math.max(0, newG)); newB = Math.min(255, Math.max(0, newB)); pixels[pos] = Color.argb(255, newR, newG, newB); } } bitmap.setPixels(pixels, 0, width, 0, 0, width, height); return bitmap; }