关于Android Bitmap Blending – Color Channels
来源:互联网 发布:淘宝卖家寄快递的软件 编辑:程序博客网 时间:2024/04/28 16:24
Android Bitmap Blending – Color Channels
最近美工要求做一种特殊的图片处理,也就是blending。显示效果就如下图。原理就是将原有的带黑色背景的那块区域抹去,留下最亮的那部分。当然中间很亮的那部分也可以在代码里面来改变原有的颜色。
private Bitmap getARGBImage(){BitmapFactory.Options opt = new BitmapFactory.Options();opt.inPreferredConfig = Config.ARGB_8888;Bitmap red = BitmapFactory.decodeResource(getResources(),R.drawable.red, opt);Bitmap green = BitmapFactory.decodeResource(getResources(),R.drawable.green, opt);Bitmap blue = BitmapFactory.decodeResource(getResources(),R.drawable.blue, opt);Bitmap alphaGray = BitmapFactory.decodeResource(getResources(),R.drawable.alpha, opt);int width = red.getWidth();int height = red.getHeight();Bitmap result = Bitmap.createBitmap(width, height, Config.ARGB_8888);result.eraseColor(Color.BLACK);Paint redP = new Paint();redP.setShader(new BitmapShader(red, TileMode.CLAMP, TileMode.CLAMP));redP.setColorFilter(new PorterDuffColorFilter(Color.RED, Mode.MULTIPLY));
//此处改变MULTIPLY的值为SCREEN还能看到不一样的效果。
redP.setXfermode(new PorterDuffXfermode(Mode.SCREEN));Paint greenP = new Paint();greenP.setShader(new BitmapShader(green, TileMode.CLAMP,TileMode.CLAMP));greenP.setColorFilter(new PorterDuffColorFilter(Color.GREEN,Mode.MULTIPLY));greenP.setXfermode(new PorterDuffXfermode(Mode.SCREEN));Paint blueP = new Paint();blueP.setShader(new BitmapShader(blue, TileMode.CLAMP, TileMode.CLAMP));blueP.setColorFilter(new PorterDuffColorFilter(Color.BLUE,Mode.MULTIPLY));blueP.setXfermode(new PorterDuffXfermode(Mode.SCREEN));Canvas c = new Canvas(result);c.drawRect(0, 0, width, height, redP);c.drawRect(0, 0, width, height, greenP);c.drawRect(0, 0, width, height, blueP);Bitmap alpha = Bitmap.createBitmap(width, height, Config.ARGB_8888);int[] alphaPix = new int[width * height];alphaGray.getPixels(alphaPix, 0, width, 0, 0, width, height);int count = width * height;for (int i = 0; i < count; ++i){alphaPix[i] = alphaPix[i] << 8;}alpha.setPixels(alphaPix, 0, width, 0, 0, width, height);Paint alphaP = new Paint();alphaP.setAntiAlias(true);alphaP.setXfermode(new PorterDuffXfermode(Mode.DST_IN));c.drawBitmap(alpha, 0, 0, alphaP);red.recycle();green.recycle();blue.recycle();alphaGray.recycle();alpha.recycle();return result;}
本文主要是参考http://kevindion.com/2011/01/android-bitmap-blending-color-channels/
可能具体效果在原文说明的更清楚。
0 0
- 关于Android Bitmap Blending – Color Channels
- Color Blending
- OpenCV Color System and Channels
- Android-关于#Color
- android-关于处理Bitmap
- 关于Android Bitmap
- Blending
- android 关于Bitmap对象于内存管理
- Android 关于Bitmap对象于内存管理
- Android关于Bitmap的几个方法
- android 关于Bitmap对象于内存管理
- android 关于Bitmap压缩处理解析
- Android 中关于加载Bitmap知识点
- opengles RGB数组及Android Bitmap中int color[] RGB存储顺序
- Android中一些常用类的常用方法(Math、Random、Color、Paint、Canvas、Bitmap、BitmapFactory)
- 关于bitmap recycle trying to use a recycled bitmap android.graphics.Bitmap
- Color android
- android color
- 02js基础 js基础语法
- Object.hashCode()方法与System.identityHashCode(object)的区别
- SICP 习题 (1.42)解题总结
- C++杂记:堆栈的用法与区别
- shell脚本知识
- 关于Android Bitmap Blending – Color Channels
- win7+vs2010+opencv-2.4.9配置测试教
- TopCoder SRM 625 Incrementing Sequence 题解
- python读写不同编码txt文件
- 使用forever运行nodejs应用
- js浏览器兼容问题
- Mac环境下svn的使用
- FluentData - 轻量级.NET ORM持久化技术解决方案
- windows下eclipse android-ndkr7b环境配置