这是数字图像处理软件系列的第二篇。
首先来讲解图像特效部分
1、选择本地图片,如下图结果:
底部状态栏有多种特效可以选择,有:怀旧,锐化,火焰,浮雕,柔化,光晕,红外,淡化,灰度等效果
下面我选择两种特效做讲解:
Duang~
效果图如下:
下面来讲解思路:
~~~
long start = System.currentTimeMillis();
int width = bmp.getWidth();
int height = bmp.getHeight();
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
int pixColor = 0;
int pixR = 0;
int pixG = 0;
int pixB = 0;
int newR = 0;
int newG = 0;
int newB = 0;
~~~
//没张图片都可以转化为RGB信息,也就是说对RGB信息修改,意味着对图片的修改,也就是产生的一般特效(特殊的特效更为复杂)。
以下内容为核心处理:
~~~
int[] pixels = new int[width * height];
bmp.getPixels(pixels, 0, width, 0, 0, width, height);
for (int i = 0; i < height; i++)
{
for (int k = 0; k < width; k++)
{
pixColor = pixels[width * i + k];
pixR = Color.red(pixColor);
pixG = Color.green(pixColor);
pixB = Color.blue(pixColor);
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);
int newColor = Color.argb(255, newR > 255 ? 255 : newR, newG > 255 ? 255 : newG, newB > 255 ? 255 : newB);
pixels[width * i + k] = newColor;
}
}
~~~
//对每个像素点取RGB,并修改,修改后替换原来信息。
~~~
bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
long end = System.currentTimeMillis();
Log.d("may", "used time="+(end - start));
return bitmap;
~~~
//最后实现,返回位图。