您的位置:首页 > 其它

安卓图像处理入门教程

2016-01-05 16:15 274 查看

第1章 图像处理概念介绍

1、RGBA模型分析

RGB:red,green,blue,alpha
色相:物体传递的颜色
饱和度:颜色的灰度,从0(灰)-100%


亮度:颜色的相对明暗程度

ColorMatrix

setRotate()

setSaturation()

setScale()

postConcat()

第2章 颜色矩阵变换与实例

图片中矩阵的作用通常用于初始化颜色矩阵



第3章 像素点分析与实例

1.使用getPixels()方法可获取图片的所有点的颜色值,一般采用以下格式:bitmap.getPixels(int[] ,0,width,0,0,width,height)。

参数说明:存放像素值的数组->最开始读取像素时的偏移量->行距(多少算作一行,一般去width)->(x,y)第一次读取参数的目标->要读取像素的长度->要读取像素的宽度

2.获取所有点的颜色值后,想对像素点进行操作,则需要一Color。red(color)方法读取R分量,G、B、Alpha分量类似。此处的color为之前存放在数组里的颜色值

3.处理RGB值之后,还需检查其是否依旧在(0,255)范围内

4.使用方法newPx[i] = Color.argb(a, r, g, b);将新的RGB值创造新的颜色值

5.使用bmp.setPixels(newPx, 0, width, 0, 0, width, height);将颜色值应用到图片上,返回图片

r = Color.red(color);
g = Color.green(color);
b = Color.blue(color);
a = Color.alpha(color);


底片

r = 255 - r;
g = 255 - g;
b = 255 - b;


老照片

r1 = (int) (0.393 * r + 0.769 * g + 0.189 * b);
g1 = (int) (0.349 * r + 0.686 * g + 0.168 * b);
b1 = (int) (0.272 * r + 0.534 * g + 0.131 * b);


浮雕

r = (r - r1 + 127);
g = (g - g1 + 127);
b = (b - b1 + 127);


ImageHelper工具类

public class ImageHelper {
public static Bitmap handleImageEffect(Bitmap bm, float hue, float saturation, float lum) {
Bitmap bmp=Bitmap.createBitmap(bm.getWidth(),bm.getHeight(),Bitmap.Config.ARGB_8888);
Canvas canvas=new Canvas(bmp);
Paint paint=new Paint(Paint.ANTI_ALIAS_FLAG);

ColorMatrix hueMatrix=new ColorMatrix();
hueMatrix.setRotate(0,hue);
hueMatrix.setRotate(1, hue);
hueMatrix.setRotate(2, hue);

ColorMatrix saturationMatrix=new ColorMatrix();
saturationMatrix.setSaturation(saturation);

ColorMatrix lumMatrix=new ColorMatrix();
lumMatrix.setScale(lum,lum,lum,1);

ColorMatrix imageMatrix=new ColorMatrix();
imageMatrix.postConcat(hueMatrix);
imageMatrix.postConcat(saturationMatrix);
imageMatrix.postConcat(lumMatrix);

paint.setColorFilter(new ColorMatrixColorFilter(imageMatrix));
canvas.drawBitmap(bm,0,0,paint);

return bmp;
}
public static Bitmap handleImageNegative(Bitmap bm){
int width = bm.getWidth();
int height = bm.getHeight();
int color;
int r, g, b, a;

Bitmap bmp = Bitmap.createBitmap(width, height
, Bitmap.Config.ARGB_8888);

int[] oldPx = new int[width * height];
int[] newPx = new int[width * height];
bm.getPixels(oldPx, 0, width, 0, 0, width, height);

for (int i = 0; i < width * height; i++) {
color = oldPx[i];
r = Color.red(color);
g = Color.green(color);
b = Color.blue(color);
a = Color.alpha(color);

r = 255 - r; g = 255 - g; b = 255 - b;
if (r > 255) {
r = 255;
} else if (r < 0) {
r = 0;
}
if (g > 255) {
g = 255;
} else if (g < 0) {
g = 0;
}
if (b > 255) {
b = 255;
} else if (b < 0) {
b = 0;
}
newPx[i] = Color.argb(a, r, g, b);
}
bmp.setPixels(newPx, 0, width, 0, 0, width, height);
return bmp;
}

public static Bitmap handleImagePixelsoldPhoto(Bitmap bm) {
Bitmap bmp = Bitmap.createBitmap(bm.getWidth(), bm.getHeight(),
Bitmap.Config.ARGB_8888);
int width = bm.getWidth();
int height = bm.getHeight();
int color = 0;
int r, g, b, a, r1, g1, b1;

int[] oldPx = new int[width * height];
int[] newPx = new int[width * height];

bm.getPixels(oldPx, 0, bm.getWidth(), 0, 0, width, height);
for (int i = 0; i < width * height; i++) {
color = oldPx[i];
a = Color.alpha(color);
r = Color.red(color);
g = Color.green(color);
b = Color.blue(color);

r1 = (int) (0.393 * r + 0.769 * g + 0.189 * b); g1 = (int) (0.349 * r + 0.686 * g + 0.168 * b); b1 = (int) (0.272 * r + 0.534 * g + 0.131 * b);
if (r1 > 255) {
r1 = 255;
}
if (g1 > 255) {
g1 = 255;
}
if (b1 > 255) {
b1 = 255;
}

newPx[i] = Color.argb(a, r1, g1, b1);
}
bmp.setPixels(newPx, 0, width, 0, 0, width, height);
return bmp;
}

public static Bitmap handleImagePixelsRelief(Bitmap bm) {
Bitmap bmp = Bitmap.createBitmap(bm.getWidth(), bm.getHeight(),
Bitmap.Config.ARGB_8888);
int width = bm.getWidth();
int height = bm.getHeight();
int color = 0, colorBefore = 0;
int a, r, g, b;
int r1, g1, b1;

int[] oldPx = new int[width * height];
int[] newPx = new int[width * height];

bm.getPixels(oldPx, 0, bm.getWidth(), 0, 0, width, height);
for (int i = 1; i < width * height; i++) {
colorBefore = oldPx[i - 1];
a = Color.alpha(colorBefore);
r = Color.red(colorBefore);
g = Color.green(colorBefore);
b = Color.blue(colorBefore);

color = oldPx[i];
r1 = Color.red(color);
g1 = Color.green(color);
b1 = Color.blue(color);

r = (r - r1 + 127);
g = (g - g1 + 127);
b = (b - b1 + 127);
if (r > 255) {
r = 255;
}
if (g > 255) {
g = 255;
}
if (b > 255) {
b = 255;
}
newPx[i] = Color.argb(a, r, g, b);
}
bmp.setPixels(newPx, 0, width, 0, 0, width, height);
return bmp;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: