android图片特效处理之图片叠加
来源:互联网 发布:安防软件推广 编辑:程序博客网 时间:2024/05/16 18:04
这篇将讲到图片特效处理的图片叠加效果。跟前面一样是对像素点进行处理,可参照前面的android图像处理系列之七--图片涂鸦,水印-图片叠加和android图像处理系列之六--给图片添加边框(下)-图片叠加两篇文章,此篇所讲的与之前有一点区别。叠加原理是两张图片的像素点按透明度叠加,不会进行颜色过滤。叠加图片可以是JPG格式,跟前在一样,最好是放大assets目录。下面看效果图:
+=
代码:
/** * 图片效果叠加 * @param bmp 限制了尺寸大小的Bitmap * @return */ private Bitmap overlay(Bitmap bmp) { long start = System.currentTimeMillis(); int width = bmp.getWidth(); int height = bmp.getHeight(); Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565); // 对边框图片进行缩放 Bitmap overlay = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.rainbow_overlay); int w = overlay.getWidth(); int h = overlay.getHeight(); float scaleX = width * 1F / w; float scaleY = height * 1F / h; Matrix matrix = new Matrix(); matrix.postScale(scaleX, scaleY); Bitmap overlayCopy = Bitmap.createBitmap(overlay, 0, 0, w, h, matrix, true); int pixColor = 0; int layColor = 0; int pixR = 0; int pixG = 0; int pixB = 0; int pixA = 0; int newR = 0; int newG = 0; int newB = 0; int newA = 0; int layR = 0; int layG = 0; int layB = 0; int layA = 0; final float alpha = 0.5F; int[] srcPixels = new int[width * height]; int[] layPixels = new int[width * height]; bmp.getPixels(srcPixels, 0, width, 0, 0, width, height); overlayCopy.getPixels(layPixels, 0, width, 0, 0, width, height); int pos = 0; for (int i = 0; i < height; i++) { for (int k = 0; k < width; k++) { pos = i * width + k; pixColor = srcPixels[pos]; layColor = layPixels[pos]; pixR = Color.red(pixColor); pixG = Color.green(pixColor); pixB = Color.blue(pixColor); pixA = Color.alpha(pixColor); layR = Color.red(layColor); layG = Color.green(layColor); layB = Color.blue(layColor); layA = Color.alpha(layColor); newR = (int) (pixR * alpha + layR * (1 - alpha)); newG = (int) (pixG * alpha + layG * (1 - alpha)); newB = (int) (pixB * alpha + layB * (1 - alpha)); layA = (int) (pixA * alpha + layA * (1 - alpha)); newR = Math.min(255, Math.max(0, newR)); newG = Math.min(255, Math.max(0, newG)); newB = Math.min(255, Math.max(0, newB)); newA = Math.min(255, Math.max(0, layA)); srcPixels[pos] = Color.argb(newA, newR, newG, newB); } } bitmap.setPixels(srcPixels, 0, width, 0, 0, width, height); long end = System.currentTimeMillis(); Log.d("may", "overlayAmeliorate used time="+(end - start)); return bitmap; }
叠加的边框图片还是大点比较好,也要控制被叠加图片大小。alpha变量值可以根据需求修改,建议还是大于0.5比较好,不然原图会看不清楚。
android技术上如有疑问可以问我,有问必答.
爱品茶的盆友,光顾小店(谢谢,能收藏最好了):
http://lancezone.taobao.com
0 0
- android图片特效处理之图片叠加
- Android图片特效处理之图片叠加
- android图片特效处理之图片叠加
- android图片特效处理之图片叠加
- android图片特效处理之图片叠加
- android图片特效处理之图片叠加
- Android 图片处理特效
- Android 图片处理特效
- android图片特效处理之光晕效果
- android图片特效处理之光照效果
- android图片特效处理之锐化效果
- android图片特效处理之模糊效果
- android图片特效处理之怀旧效果
- android图片特效处理之光晕效果
- android图片特效处理之锐化效果
- android图片特效处理之模糊效果
- android图片特效处理之怀旧效果
- android图片特效处理之光照效果
- 理解windows 窗体和wpf的跨线程调用
- Java开发中的23种设计模式【转】
- DELL Compellent助力企业信息化
- (libgdx小结)字体的绘制(特别是中文字体)
- PMP笔记-项目的生命周期类型
- android图片特效处理之图片叠加
- ArcGIS桌面开发之—COM模式
- Android应用资源之动画资源(Animation Resources)
- C语言中堆和栈的区别
- 【Objective-C】04-第一个OC程序解析
- Android MTK平台修改开机动画,开机logo
- ORA-12514 TNS 监听程序当前无法识别连接描述符中请求的服务
- IOS ASIHttp库的使用总结
- 通过Shell判断某个日期是星期几