android 图片美白算法,android图片特效算法

图片特效算法 1、 把资源图片转为灰度图

原理: 彩色图像处理成黑白效果通常有3种算法!

(1).最大值法!使每个像素点的 R, G, B 值等于原像素点的 RGB(颜色值)中最大的一

个,

(2).平均值法!使用每个像素点的 R,G,B值等于原像素点的RGB值的平均值,

(3).加权平均值法!对每个像素点的 R,G, B值进行加权

以下是平均法!

// 获取当前点

pos = y * width + x;

// 获取图片当前点的像素值

pixColor = dst[pos];

// 获取RGB三原色

R = Color.red(pixColor);

G = Color.green(pixColor);

B = Color.blue(pixColor);

// 去平均

pixel = (R + G + B) / 3;

R = G = B = pixel;

2、 底片效果

原理: GetPixel方法获得每一点像素的值, 然后再使用SetPixel方法将取反后的颜色值设

置到对应的点

// RGB三色取反

pixel = R;

pixel = 255 - pixel;

R = pixel; // 计算后重置R值,以下类同

pixel = G;

pixel = 255 - pixel;

G = pixel;

pixel = B;

pixel = 255 - pixel;

B = pixel;

3、 浮雕效果

原理: 对图像像素点的像素值分别与相邻像素点的像素值相减后加上128, 然后将其作

为新的像素点的值.

pos = y * width + x;

pos1 = (y + 1) * width + (x + 1);

pixColor = dst[pos]; // 获取图片当前点的像素值

pixColor1 = dst[pos1]; // 获取图片当前点的像素值

1/6页

R = Color.red(pixColor); // 获取RGB三原色

G = Color.green(pixColor);

B = Color.blue(pixColor);

R1 = Color.red(pixColor1); // 获取RGB三原色

G1 = Color.green(pixColor1);

B1 = Color.blue(pixColor1);

R = Math.abs(R - R1 + 128);

G = Math.abs(G - G1 + 128);

B = Math.abs(B - B1 + 128);

if (R

R = 0;

if (R > 255)

R = 255;

if (G

G = 0;

if (G > 255)

G = 255;

if (B

B = 0;

if (B > 255)

B = 255;

4、 冰冻效果

pixel = R - G - B;

pixel = pixel * 3 / 2;

if (pixel

pixel = -pixel;

if (pixel > 255)

pixel = 255;

R = pixel; // 计算后重置R值,以下类同

pixel = G - B - R;

pixel = pixel * 3 / 2;

if (pixel

pixel = -pixel;

if (pixel > 255)

pixel = 255;

G = pixel;

pixel = B - R - G;

pixel = pixel * 3 / 2;

2/6页

if (pixel

pixel = -pixel;

if (pixel > 255)

pixel = 255;

B = pixel;

5、 雾化效果

原理: 在图像中引入一定的随机值, 打乱图像中的像素值

Random MyRandom = new Random();

// 随机数,在像素块数值不变时,随机数数值越大越模糊,像素块越密集

int k = MyRandom.nextInt(123456);

// 像素块大小;在随机数不变的情况下,所除的数越大越模糊,越密集

int dx = x + k % 8;

int dy = y + k % 8;

if (dx >= width)

dx = width - 1;

if (dy >= height)

dy = height - 1;

pos = dy * width + dx;

pos1 = y * width + x;

dst[pos1] = dst[pos]; // 获取图片当前点的像素值

6、 积木效果

原理: 对图像中的各个像素点着重(即加大分像素的颜色值)着色.

// 去平均

pixel = (R + G + B) / 3;

if (pixel >= 128) {

pixel = 255;

} else {

pixel = 0;

}

R = G = B = pixel;

7、 熔铸效果

pixel = R * 128 / (G + B + 1);

if (pixel

pixel = 0;

if (pixel > 255)

pixel = 255;

R = pixel;

pixel = G * 128 / (B + R + 1);

if (pixel

pixel = 0;

3/6页

if (pixel > 255)

pixel = 255;

G = pixel;

pixel = B * 128 / (R + G + 1);

if (pixel

pixel = 0;

if (pixel > 255)

pixel = 255;

B = pixel;

8、 连环画效果

// R = |g – b + g + r| * r / 256;

pixel = Math.abs(G - B + G + R) * R / 256;

if (pixel > 255)

pixel = 255;

R = pixel;

// G = |b – g + b + r| * r / 256;

pixel = Math.abs(B - G + B + R) * R / 256;

if (pixel > 255)

pixel = 255;

G = pixel;

// B = |b – g + b + r| * g / 256;

pixel = Math.abs(B - G + B + R) * G / 256;

if (pixel > 255)

pixel = 255;

B = pixel;

9、 边缘高亮(霓虹处理)

首先计算原图象像素f(i,j)的红,绿,蓝分量与相同行f?i+1,j?及同列f(i,j+1)相邻象素的梯度,即差的平方之和的平方根,然后将梯度值作为处理后的象素g(i,j)的红,绿,蓝分量值。

// 获取当前点

pos = y * width + x;

pos1 = y * width + x + width;

pos2 = y * width + x + 1;

// 获取图片当前点的像素值

pixColor = dst[pos];

pixColor1 = dst[pos1];

pixColor2 = dst[pos2];

// R 取值

pixel = (int) (Math.pow((Color.red(pixColor) - Color.red(pixColor1)), 2) + Math

4/6页

.pow((Color.red(pixColor) - Color.red(pixColor2)), 2));

pixel = (int) (Math.sqrt(pixel) * 2);

if (pixel

pixel = 0;

if (pixel > 255)

pixel = 255;

R = pixel;

// G 取值

pixel = (int) (Math.pow((Color.green(pixColor) - Color.green(pixColor1)), 2) + Math

.pow((Color.green(pixColor) - Color.green(pixColor2)),2));

pixel = (int) (Math.sqrt(pixel) * 2);

if (pixel

pixel = 0;

if (pixel > 255)

pixel = 255;

G = pixel;

// B 取值

pixel = (int) (Math.pow((Color.blue(pixColor) - Color.blue(pixColor1)), 2) + Math

.pow((Color.blue(pixColor) - Color.blue(pixColor2)), 2));

pixel = (int) (Math.sqrt(pixel) * 2);

if (pixel

pixel = 0;

if (pixel > 255)

pixel = 255;

B = pixel;

10、 锐化效果

计算原图像像素f(i,j)的像素值与该像素与相邻像素f(i-1,j-1)像素值之差的绝对值得百分比之和,作为处理后图像像素g(i,j)的像素值。

// 获取当前点

pos1 = y * width + x;

pos2 = (y + 1) * width + (x + 1);

pixColor1 = dst[pos1];

pixColor2 = dst[pos2];

// 获取点1 的三色值

r1 = Color.red(pixColor1);

g1 = Color.green(pixColor1);

b1 = Color.blue(pixColor1);

// 获取点 2 的三色值

r2 = Color.red(pixColor2);

g2 = Color.green(pixColor2);

b2 = Color.blue(pixColor2);

// 计算新的三色值

r = r1 + (temp / 100) * Math.abs(r1 - r2);

5/6页  图片特效算法 1、 把资源图片转为灰度图

原理: 彩色图像处理成黑白效果通常有3种算法!

(1).最大值法!使每个像素点的 R, G, B 值等于原像素点的 RGB(颜色值)中最大的一

个,

(2).平均值法!使用每个像素点的 R,G,B值等于原像素点的RGB值的平均值,

(3).加权平均值法!对每个像素点的 R,G, B值进行加权

以下是平均法!

// 获取当前点

pos = y * width + x;

// 获取图片当前点的像素值

pixColor = dst[pos];

// 获取RGB三原色

R = Color.red(pixColor);

G = Color.green(pixColor);

B = Color.blue(pixColor);

// 去平均

pixel = (R + G + B) / 3;

R = G = B = pixel;

2、 底片效果

原理: GetPixel方法获得每一点像素的值, 然后再使用SetPixel方法将取反后的颜色值设

置到对应的点

// RGB三色取反

pixel = R;

pixel = 255 - pixel;

R = pixel; // 计算后重置R值,以下类同

pixel = G;

pixel = 255 - pixel;

G = pixel;

pixel = B;

pixel = 255 - pixel;

B = pixel;

3、 浮雕效果

原理: 对图像像素点的像素值分别与相邻像素点的像素值相减后加上128, 然后将其作

为新的像素点的值.

pos = y * width + x;

pos1 = (y + 1) * width + (x + 1);

pixColor = dst[pos]; // 获取图片当前点的像素值

pixColor1 = dst[pos1]; // 获取图片当前点的像素值

1/6页

R = Color.red(pixColor); // 获取RGB三原色

G = Color.green(pixColor);

B = Color.blue(pixColor);

R1 = Color.red(pixColor1); // 获取RGB三原色

G1 = Color.green(pixColor1);

B1 = Color.blue(pixColor1);

R = Math.abs(R - R1 + 128);

G = Math.abs(G - G1 + 128);

B = Math.abs(B - B1 + 128);

if (R

R = 0;

if (R > 255)

R = 255;

if (G

G = 0;

if (G > 255)

G = 255;

if (B

B = 0;

if (B > 255)

B = 255;

4、 冰冻效果

pixel = R - G - B;

pixel = pixel * 3 / 2;

if (pixel

pixel = -pixel;

if (pixel > 255)

pixel = 255;

R = pixel; // 计算后重置R值,以下类同

pixel = G - B - R;

pixel = pixel * 3 / 2;

if (pixel

pixel = -pixel;

if (pixel > 255)

pixel = 255;

G = pixel;

pixel = B - R - G;

pixel = pixel * 3 / 2;

2/6页

if (pixel

pixel = -pixel;

if (pixel > 255)

pixel = 255;

B = pixel;

5、 雾化效果

原理: 在图像中引入一定的随机值, 打乱图像中的像素值

Random MyRandom = new Random();

// 随机数,在像素块数值不变时,随机数数值越大越模糊,像素块越密集

int k = MyRandom.nextInt(123456);

// 像素块大小;在随机数不变的情况下,所除的数越大越模糊,越密集

int dx = x + k % 8;

int dy = y + k % 8;

if (dx >= width)

dx = width - 1;

if (dy >= height)

dy = height - 1;

pos = dy * width + dx;

pos1 = y * width + x;

dst[pos1] = dst[pos]; // 获取图片当前点的像素值

6、 积木效果

原理: 对图像中的各个像素点着重(即加大分像素的颜色值)着色.

// 去平均

pixel = (R + G + B) / 3;

if (pixel >= 128) {

pixel = 255;

} else {

pixel = 0;

}

R = G = B = pixel;

7、 熔铸效果

pixel = R * 128 / (G + B + 1);

if (pixel

pixel = 0;

if (pixel > 255)

pixel = 255;

R = pixel;

pixel = G * 128 / (B + R + 1);

if (pixel

pixel = 0;

3/6页

if (pixel > 255)

pixel = 255;

G = pixel;

pixel = B * 128 / (R + G + 1);

if (pixel

pixel = 0;

if (pixel > 255)

pixel = 255;

B = pixel;

8、 连环画效果

// R = |g – b + g + r| * r / 256;

pixel = Math.abs(G - B + G + R) * R / 256;

if (pixel > 255)

pixel = 255;

R = pixel;

// G = |b – g + b + r| * r / 256;

pixel = Math.abs(B - G + B + R) * R / 256;

if (pixel > 255)

pixel = 255;

G = pixel;

// B = |b – g + b + r| * g / 256;

pixel = Math.abs(B - G + B + R) * G / 256;

if (pixel > 255)

pixel = 255;

B = pixel;

9、 边缘高亮(霓虹处理)

首先计算原图象像素f(i,j)的红,绿,蓝分量与相同行f?i+1,j?及同列f(i,j+1)相邻象素的梯度,即差的平方之和的平方根,然后将梯度值作为处理后的象素g(i,j)的红,绿,蓝分量值。

// 获取当前点

pos = y * width + x;

pos1 = y * width + x + width;

pos2 = y * width + x + 1;

// 获取图片当前点的像素值

pixColor = dst[pos];

pixColor1 = dst[pos1];

pixColor2 = dst[pos2];

// R 取值

pixel = (int) (Math.pow((Color.red(pixColor) - Color.red(pixColor1)), 2) + Math

4/6页

.pow((Color.red(pixColor) - Color.red(pixColor2)), 2));

pixel = (int) (Math.sqrt(pixel) * 2);

if (pixel

pixel = 0;

if (pixel > 255)

pixel = 255;

R = pixel;

// G 取值

pixel = (int) (Math.pow((Color.green(pixColor) - Color.green(pixColor1)), 2) + Math

.pow((Color.green(pixColor) - Color.green(pixColor2)),2));

pixel = (int) (Math.sqrt(pixel) * 2);

if (pixel

pixel = 0;

if (pixel > 255)

pixel = 255;

G = pixel;

// B 取值

pixel = (int) (Math.pow((Color.blue(pixColor) - Color.blue(pixColor1)), 2) + Math

.pow((Color.blue(pixColor) - Color.blue(pixColor2)), 2));

pixel = (int) (Math.sqrt(pixel) * 2);

if (pixel

pixel = 0;

if (pixel > 255)

pixel = 255;

B = pixel;

10、 锐化效果

计算原图像像素f(i,j)的像素值与该像素与相邻像素f(i-1,j-1)像素值之差的绝对值得百分比之和,作为处理后图像像素g(i,j)的像素值。

// 获取当前点

pos1 = y * width + x;

pos2 = (y + 1) * width + (x + 1);

pixColor1 = dst[pos1];

pixColor2 = dst[pos2];

// 获取点1 的三色值

r1 = Color.red(pixColor1);

g1 = Color.green(pixColor1);

b1 = Color.blue(pixColor1);

// 获取点 2 的三色值

r2 = Color.red(pixColor2);

g2 = Color.green(pixColor2);

b2 = Color.blue(pixColor2);

// 计算新的三色值

r = r1 + (temp / 100) * Math.abs(r1 - r2);

g = g1 + (temp / 100) * Math.abs(g1 - g2);

b = b1 + (temp / 100) * Math.abs(b1 - b2);

6/6页全文完

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值