android图像处理(3)底片效果

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

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

例:

ABC

求B点的底片效果:

B.r = 255 - B.r;

B.g = 255 - B.g;

B.b = 255 - B.b;

效果图:

效果图                                                                     原图

代码:

[java] view plain copy

    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. }
时间: 2024-11-05 06:09:23

android图像处理(3)底片效果的相关文章

android 图像处理(黑白,模糊,浮雕,圆角,镜像,底片,油画,灰白,加旧,哈哈镜,放大镜)

转载文章请注明出处:http://blog.csdn.net/dangxw_/article/details/25063673 前些天在github上得到一个关于图像处理的源码(地址找不到了),挺全面,闲了分享一下.感谢开源. 对于图片的反转,倾斜,缩放之类的操作就不提了,网上太多了.大多都是用的Matrix现成方法. 原图: 一:圆角处理 效果: 代码: public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, float round

[Android] 图像处理软件整合之处理ColorMatrix和Intend传递路径显示图像

    经过几门考试之后,终于有时间整合下自己的Anroid项目"随手拍"的图像处理部分了,主要是结合前面几篇文章讲解的各种android图像处理技术和PopupWindow布局,图像初步整合效果如下.由于该软件目前还未答辩,所以结束后会共享所有的源代码,可能需要一个月后吧,抱歉~               在"随手拍"中点击发布,有添加图片按钮,点击出现"选择本地图片"和"照相截拆选择",显示图片至另一个处理界面,底部五个

Android 图像处理软件

在机器视觉实验室呆了有一年半时间了,但由于自己"任性".一直以来学习的内容都是自己来安排,我还是坚持认为没有最好和最简单的技术,只有自己喜欢的技术.不过说起来还是会觉得惭愧,经常听到师兄们谈论图像处理各种算法,可是一直到此软件诞生之前对机器视觉的知识可以说一概不知.自己研究的主要是Android系统的东西,从上层到下层都有所涉及.一直以来都想把自身所长和实验室主题联系上,这样可以多和实验室牛人沟通,也顺便刷刷存在感~由此向师兄师弟们请教一二,学了一点图像处理技术,做了一款Android

android 图像处理系列合集

为了便于大家对滤镜算法的学习,以后发布的图像处理滤镜系列帖子会在这里汇总,本人第一次写合集,写得不好的地方大家请见谅,手头上虽然有一些滤镜的算法,但是大多不是android版的,教程里的代码大多是我借鉴其他语言的算法转换而成的,效率上还存在优化的空间,大家可以自行优化.有些网友说代码能看懂,但是里面的某些数值不知道是怎么计算出来的,说实话有些数值我不查资料我也不是很清楚,但是当我需要知道的时候我也会慢慢查阅算法的核心思想,很多参数由此而来.同时也希望大家养成不懂就查的习惯. android 图像

android图像处理系列之七--图片涂鸦,水印-图片叠加

图片涂鸦和水印其实是一个功能,实现的方式是一样的,就是一张大图片和一张小点图片叠加即可.前面在android图像处理系列之六--给图片添加边框(下)-图片叠加中也讲到了图片叠加,里面实现的原理是直接操作像素点.下面给出别外一种方式让图片叠加--用Canvas处理图片,canvas已经封装好了,直接调用就行. 下面看效果: += 代码: [java] view plain copy /** * 组合涂鸦图片和源图片 * @param src 源图片 * @param watermark 涂鸦图片

Android图像处理

在imooc上看了eclipse_xu的课程<Android图像处理>,照葫芦画瓢写了一个Demo: 看一下效果图: 核心代码: package com.zms.imageprocess; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.view.View; im

android图像处理系列之三--图片色调饱和度、色相、亮度处理

原图: 处理后: 下面贴代码: 一.图片处理层: [java] view plaincopy package com.jacp.tone.view; import java.util.ArrayList; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.ColorMatrix; import android

android图像处理系列之五--给图片添加边框(中)

前面一篇讲到给图片加边框的方式,只能给图片加一些有规则的边框,如果想加一些比较精美的效果,就有点麻烦了.下面就给出解决这个问题的思路. 思路是:一些比较精美的花边图片我们是很难用代码控制,就目前本人水平是达不到,不排除牛人,再说了PS那些效果都是程序员做出来,肯定有实现的方法,这可能就要涉及很复杂的图形学.扯远了,接来说怎么用那些精美的花边做为图片的边框.简单的方式是用两张图片叠加.最简单的一种是本文介绍的,用透明的PNG格式图片.因为Android是支持PNG图片处理的,而且PNG图片有透明度

android图像处理系列之四--给图片添加边框(上)

图片处理时,有时需要为图片加一些边框,下面介绍一种为图片添加简单边框的方法. 基本思路是:将边框图片裁剪成八张小图片(图片大小最好一致,不然后面处理会很麻烦),分别对应左上角,左边,左下角,下边,右下角,右边,右上角,上边,其中左右上下只需要一个有效长度,就像重写水平进度条一样,只需要一个有效的长度,然后平铺,就达到了最后想要的效果,不错,左右上下边采用的也是这样的思路.也可以将八张图片组合在一起,然后读取整张图片,用代码裁剪,下面会给出相应的代码.下面的代码主要是给出第一种方法,后一种给出代码

android图像处理系列之四-- 给图片添加边框(上)

图片处理时,有时需要为图片加一些边框,下面介绍一种为图片添加简单边框的方法. 基本思路是:将边框图片裁剪成八张小图片(图片大小最好一致,不然后面处理会很麻烦),分别对应左上角,左边,左下角,下边,右下角,右边,右上角,上边,其中左右上下只需要一个有效长度,就像重写水平进度条一样,只需要一个有效的长度,然后平铺,就达到了最后想要的效果,不错,左右上下边采用的也是这样的思路.也可以将八张图片组合在一起,然后读取整张图片,用代码裁剪,下面会给出相应的代码.下面的代码主要是给出第一种方法,后一种给出代码