怀旧图片处理
来源:互联网 发布:淘宝 知乎 姨 编辑:程序博客网 时间:2024/03/29 23:11
int pixColor = 0; int pixR = 0; int pixG = 0; int pixB = 0; int newR = 0; int newG = 0; int newB = 0; int[] pixels = new int[width * height]; //获取图片的像素(一维数组) /* * pixels 接收位图颜色值的数组 * offset 写入到pixels[]中的第一个像素索引值 * stride pixels[]中的行间距个数值(必须大于等于位图宽度)。可以为负数 * x 从位图中读取的第一个像素的x坐标值。 * y 从位图中读取的第一个像素的y坐标值 * width 从每一行中读取的像素宽度 * height 读取的行数 */ bitmap.getPixels(pixels, 0, width, 0, 0, width, height); //获取一个高height宽width的图片像素 for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { pixColor = pixels[width * i + j]; //等价于(pixColor >> 16) & 0xFF 获取一个像素的R pixR = Color.red(pixColor); //等价于(pixColor >> 8) & 0xFF 获取一个像素的G pixG = Color.green(pixColor); //等价于(pixColor) & 0xFF 获取一个像素的B pixB = Color.blue(pixColor); //根据算法由原图的RGB生成新的RGB newR = (int) (0.393 * pixR + 0.769 * pixG + 0.189 * pixB); newG = (int) (0.349 * pixR + 0.686 * pixG + 0.168 * pixB); newB = (int) (0.272 * pixR + 0.534 * pixG + 0.131 * pixB); //由RGB生成一个像素 //函数:argb (int alpha, int red, int green, int blue) int newColor = Color.argb(255, newR > 255 ? 255 : newR, newG > 255 ? 255 : newG, newB > 255 ? 255 : newB); pixels[width * i + j] = newColor; } } //生成新的图片 bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
转自:http://blog.csdn.net/sjf0115/article/details/8699407