图片特效算法 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页全文完