Android图像处理之熔铸特效


代码:

    1. package com.color;  
    2.   
    3. import android.content.Context;  
    4. import android.graphics.Bitmap;  
    5. import android.graphics.BitmapFactory;  
    6. import android.graphics.Canvas;  
    7. import android.graphics.Color;  
    8. import android.graphics.Paint;  
    9. import android.util.AttributeSet;  
    10. import android.widget.ImageView;  
    11.   
    12. public class ColorView extends ImageView {  
    13.   
    14.     private Paint myPaint = null;  
    15.     private Bitmap bitmap = null;  
    16.     private int width, height;  
    17.     private int[] oldPixels;  
    18.     private int[] newPixels;  
    19.     private int color, color2;  
    20.     private int pixelsR, pixelsG, pixelsB, pixelsA, pixelsR2, pixelsG2,  
    21.             pixelsB2;  
    22.   
    23.     public ColorView(Context context, AttributeSet attrs) {  
    24.         super(context, attrs);  
    25.         bitmap = BitmapFactory.decodeResource(context.getResources(),  
    26.                 R.drawable.ww);  
    27.         width = bitmap.getWidth();  
    28.         height = bitmap.getHeight();  
    29.         oldPixels = new int[width * height];  
    30.         newPixels = new int[width * height];  
    31.         invalidate();  
    32.     }  
    33.   
    34.     @Override  
    35.     protected void onDraw(Canvas canvas) {  
    36.         super.onDraw(canvas);  
    37.         // 获取像素  
    38.         bitmap.getPixels(oldPixels, 0, width, 0, 0, width, height);  
    39.   
    40.         for (int i = 1; i < height * width; i++) {  
    41.             color = oldPixels[i];  
    42.             // 获取RGB分量  
    43.             pixelsA = Color.alpha(color);  
    44.             pixelsR = Color.red(color);  
    45.             pixelsG = Color.green(color);  
    46.             pixelsB = Color.blue(color);  
    47.             //R  
    48.             int pixel = pixelsR * 128 / (pixelsG + pixelsB + 1);  
    49.             if (pixel < 0) {  
    50.                 pixel = 0;  
    51.             } else if (pixel > 255) {  
    52.                 pixel = 255;  
    53.             }  
    54.             pixelsR = pixel;  
    55.             //G  
    56.             pixel = pixelsG * 128 / (pixelsB + pixelsR + 1);  
    57.             if (pixel < 0){  
    58.                 pixel = 0;  
    59.             }  
    60.             else if (pixel > 255){  
    61.                 pixel = 255;  
    62.             }  
    63.             pixelsG = pixel;  
    64.             //B  
    65.             pixel = pixelsB * 128 / (pixelsR + pixelsG + 1);  
    66.             if (pixel < 0){  
    67.                 pixel = 0;  
    68.             }  
    69.             else if (pixel > 255){  
    70.                 pixel = 255;  
    71.             }  
    72.             pixelsB = pixel;  
    73.   
    74.             // 根据新的RGB生成新像素  
    75.             newPixels[i] = Color.argb(pixelsA, pixelsR, pixelsG, pixelsB);  
    76.   
    77.         }  
    78.         // 根据新像素生成新图片  
    79.         bitmap.setPixels(newPixels, 0, width, 0, 0, width, height);  
    80.         canvas.drawBitmap(bitmap, 0, 0, myPaint);  
    81.     }  
原文地址:https://www.cnblogs.com/Free-Thinker/p/6722690.html