这篇将讲到图片特效处理的底片效果。跟前面一样是对像素点进行处理,算法是通用的。

算法原理:将当前像素点的RGB值分别与255之差后的值作为当前点的RGB值。

例:

ABC

求B点的底片效果:

B.r = 255 - B.r;

B.g = 255 - B.g;

B.b = 255 - B.b;

效果图:

效果图                                                                     原图

代码:

  1. package com.color;
  2. import android.content.Context;
  3. import android.graphics.Bitmap;
  4. import android.graphics.BitmapFactory;
  5. import android.graphics.Canvas;
  6. import android.graphics.Color;
  7. import android.graphics.Paint;
  8. import android.util.AttributeSet;
  9. import android.widget.ImageView;
  10. public class ColorView extends ImageView {
  11. private Paint myPaint = null;
  12. private Bitmap bitmap = null;
  13. private int width,height;
  14. private int[] oldPixels;
  15. private int[] newPixels;
  16. private int color,color2;
  17. private int pixelsR,pixelsG,pixelsB,pixelsA,pixelsR2,pixelsG2,pixelsB2;
  18. public ColorView(Context context, AttributeSet attrs)
  19. {
  20. super(context, attrs);
  21. bitmap = BitmapFactory.decodeResource(context.getResources(),R.drawable.ww);
  22. width = bitmap.getWidth();
  23. height = bitmap.getHeight();
  24. oldPixels = new int[width*height];
  25. newPixels = new int[width*height];
  26. invalidate();
  27. }
  28. @Override
  29. protected void onDraw(Canvas canvas) {
  30. super.onDraw(canvas);
  31. //获取像素
  32. bitmap.getPixels(oldPixels, 0, width, 0, 0, width, height);
  33. for(int i = 1;i < height*width; i++){
  34. color = oldPixels[i];
  35. //获取RGB分量
  36. pixelsA = Color.alpha(color);
  37. pixelsR = Color.red(color);
  38. pixelsG = Color.green(color);
  39. pixelsB = Color.blue(color);
  40. //转换
  41. pixelsR = (255 - pixelsR);
  42. pixelsG = (255 - pixelsG);
  43. pixelsB = (255 - pixelsB);
  44. //均小于等于255大于等于0
  45. if(pixelsR > 255){
  46. pixelsR = 255;
  47. }
  48. else if(pixelsR < 0){
  49. pixelsR = 0;
  50. }
  51. if(pixelsG > 255){
  52. pixelsG = 255;
  53. }
  54. else if(pixelsG < 0){
  55. pixelsG = 0;
  56. }
  57. if(pixelsB > 255){
  58. pixelsB = 255;
  59. }
  60. else if(pixelsB < 0){
  61. pixelsB = 0;
  62. }
  63. //根据新的RGB生成新像素
  64. newPixels[i] = Color.argb(pixelsA, pixelsR, pixelsG, pixelsB);
  65. }
  66. //根据新像素生成新图片
  67. bitmap.setPixels(newPixels, 0, width, 0, 0, width, height);
  68. canvas.drawBitmap(bitmap,0,0,myPaint);
  69. }
  70. }

最新文章

  1. eclipse-将同一个文件分屏显示
  2. MyBatis学习--简单的增删改查
  3. phpcmsv9 标题颜色显示问题
  4. ubuntu遇到的命令
  5. Spring的IoC容器注入的类型
  6. vmware在非正常关机后无法启动虚拟机
  7. INTEL XDK 真机调试
  8. PHP之Error与Logging函数讲解
  9. Oracle 存储过程DEMO
  10. HDU3791二叉搜索树(二叉树)
  11. BandwagonHost搬瓦工VPS自建
  12. python基础-------函数(一)
  13. Javascript高级编程学习笔记(91)—— Canvas(8) 阴影
  14. 中国省市县数据库sql文件(2017年10月31日之前)
  15. Billiard CFR484 div2 (数论)
  16. C语言逗号运算符和逗号表达式基础总结
  17. 前端Vue之vue的基本操作
  18. 5. Sports 体育运动
  19. Redis学习系列五Set(集合)
  20. POJ3468(线段树区间求和+区间查询)

热门文章

  1. 程序Yuan,eclipse你,会用吗?
  2. WebApp之H5登录注册
  3. asp.net网页播放MP4 出错
  4. &lt;Sicily&gt;数字反转
  5. 关于vsphere的 许可证配置问题
  6. maven+spring-data-jpa环境搭建
  7. [转载][来自csdn]RTS和CTS是什么意思?
  8. users---显示当前登录系统的所有用户的用户列表
  9. MAC下搭建appium UI自动化环境
  10. ArcGIS api for javascript——地理编码任务-地理编码地址