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

算法原理:将当前像素点的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. 1Z0-053 争议题目解析692
  2. copy-paste component
  3. C#分割字符串
  4. C#List的排序和简单去重总结
  5. 非常全面的java基础笔试题
  6. Application(全局对象,ViewState
  7. Hive 7、Hive 的内表、外表、分区(22)
  8. NewsDao
  9. SpringMVC中遇到页面跳转出现404错误的问题
  10. HDU - 3038 种类并查集
  11. 利用JDBC工具类 模拟用户登录!
  12. centos7.5升级openssh7.4到7.9
  13. [IDEA]IDEA设置注释模板
  14. Java——this关键字
  15. ReentrantLock(重入锁)的使用
  16. 电子产品使用感受之—我的iPad Pro坏了。。。
  17. 『转载』hadoop 1.X到2.X的变化
  18. English trip V1 - B 3. I&#39;d Like a Room,Please 请给我一间房? Teacher:Julia Key:
  19. 文件I/O(2)
  20. Explaining Delegates in C# - Part 3 (Events 2)

热门文章

  1. OpenGL之抗锯齿 以及 线宽的设置
  2. HDOJ 5411 CRB and Puzzle 矩阵高速幂
  3. MongoDB 基本使用
  4. vue25---vue2.0变化
  5. 79.express里面的app.configure作用
  6. 异常:error 0152: No Entity Framework provider found for the ADO.NET provider with invariant name &#39;System.Data.SqlClient&#39;
  7. Metro界面的真正意义
  8. [转]LNMP环境下的Web常见问题排查(精品)
  9. Android性能优化之提高ListView性能的技巧
  10. Your Ruby version is 2.2.3, but your Gemfile specified 2.2.2