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

算法原理:用前一个像素点的RGB值分别减去当前像素点的RGB值并加上127作为当前像素点的RGB值。

例:

ABC

求B点的浮雕效果如下:

B.r = C.r - B.r + 127;

B.g = C.g - B.g + 127;

B.b = C.b - B.b + 127;

注意RGB值在0~255之间。

效果图:

原图                                                                              效果图

    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-1];
    35. //前一个像素
    36. pixelsR = Color.red(color);
    37. pixelsG = Color.green(color);
    38. pixelsB = Color.blue(color);
    39. //当前像素
    40. color2 = oldPixels[i];
    41. pixelsR2 = Color.red(color2);
    42. pixelsG2 = Color.green(color2);
    43. pixelsB2 = Color.blue(color2);
    44. pixelsR = (pixelsR - pixelsR2 + 127);
    45. pixelsG = (pixelsG - pixelsG2 + 127);
    46. pixelsB = (pixelsB - pixelsB2 + 127);
    47. //均小于等于255
    48. if(pixelsR > 255){
    49. pixelsR = 255;
    50. }
    51. if(pixelsG > 255){
    52. pixelsG = 255;
    53. }
    54. if(pixelsB > 255){
    55. pixelsB = 255;
    56. }
    57. newPixels[i] = Color.argb(pixelsA, pixelsR, pixelsG, pixelsB);
    58. }
    59. bitmap.setPixels(newPixels, 0, width, 0, 0, width, height);
    60. canvas.drawBitmap(bitmap,0,0,myPaint);
    61. }
    62. }

android图像处理(3)浮雕效果的更多相关文章

  1. android图像处理(3) 浮雕效果

    这篇将讲到图片特效处理的浮雕效果.跟前面一样是对像素点进行处理,算法是通用的. 算法原理:用前一个像素点的RGB值分别减去当前像素点的RGB值并加上127作为当前像素点的RGB值. 例: ABC 求B ...

  2. android 图像处理系列合集

    为了便于大家对滤镜算法的学习,以后发布的图像处理滤镜系列帖子会在这里汇总,本人第一次写合集,写得不好的地方大家请见谅,手头上虽然有一些滤镜的算法,但是大多不是android版的,教程里的代码大多是我借 ...

  3. Android图像处理实例教程

    Android图像处理实例教程 原始出处 http://vaero.blog.51cto.com/4350852/856750

  4. Android图像处理1

    项目开发要用,在慕课中学习了一下关于Android图像处理的相关功能,并进行了整理. 在Android中,我们通过最基本的改变图像的RGBA值,改变图像的颜色与饱和度. Android中有ColorM ...

  5. Android图像处理 - 高斯模糊的原理及实现

    欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 由 天天P图攻城狮 发布在云+社区 作者简介:damonxia(夏正冬),天天P图Android工程师 前言 高斯模糊是图像处理中几乎每个程序员 ...

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

    图片处理时,有时需要为图片加一些边框,下面介绍一种为图片添加简单边框的方法. 基本思路是:将边框图片裁剪成八张小图片(图片大小最好一致,不然后面处理会很麻烦),分别对应左上角,左边,左下角,下边,右下 ...

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

    前面一篇讲到给图片加边框的方式,只能给图片加一些有规则的边框,如果想加一些比较精美的效果,就有点麻烦了.下面就给出解决这个问题的思路. 思路是:一些比较精美的花边图片我们是很难用代码控制,就目前本人水 ...

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

    图片处理时,有时需要为图片加一些边框,下面介绍一种为图片添加简单边框的方法. 基本思路是:将边框图片裁剪成八张小图片(图片大小最好一致,不然后面处理会很麻烦),分别对应左上角,左边,左下角,下边,右下 ...

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

    前面一篇讲到给图片加边框的方式,只能给图片加一些有规则的边框,如果想加一些比较精美的效果,就有点麻烦了.下面就给出解决这个问题的思路. 思路是:一些比较精美的花边图片我们是很难用代码控制,就目前本人水 ...

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

    图片涂鸦和水印其实是一个功能,实现的方式是一样的,就是一张大图片和一张小点图片叠加即可.前面在android图像处理系列之六--给图片添加边框(下)-图片叠加中也讲到了图片叠加,里面实现的原理是直接操 ...

随机推荐

  1. linux学习之高并发服务器篇(二)

    高并发服务器 1.线程池并发服务器 两种模型: 预先创建阻塞于accept多线程,使用互斥锁上锁保护accept(减少了每次创建线程的开销) 预先创建多线程,由主线程调用accept 线程池 3.多路 ...

  2. 【Codeforces Round #421 (Div. 2) B】Mister B and Angle in Polygon

    [题目链接]:http://codeforces.com/contest/820/problem/B [题意] 给你一个正n边形; 然后让你在这正n边行中选3个点,组成一个角; 找出角的大小和所给的角 ...

  3. [Spark源代码剖析] DAGScheduler提交stage

    转载请标明出处:http://blog.csdn.net/bigbigdata/article/details/47310657 DAGScheduler通过调用submitStage来提交stage ...

  4. iOS 动画Animation - 5:UIBezier

    首先说明:这是一系列文章,參考本专题下其它的文章有助于你对本文的理解. 在之前的bolg中大家会发现总是会出现UIBezier,可是我也没有做过多介绍,今天就集中介绍一下UIBezier.首先.UIB ...

  5. POJ 2826 An Easy Problem!(简单数论)

    Description Have you heard the fact "The base of every normal number system is 10" ? Of co ...

  6. legend---五、如何优雅的实现多继承

    legend---五.如何优雅的实现多继承 一.总结 一句话总结:多继承可以通过把别人对象作为属性来调用属性的方法执行, 继承的本质也是为了调用方法和属性,而上述的方式可以满足 1.php中前端可以共 ...

  7. Redis封装之List

    /// <summary> /// Redis list的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销, /// Redis内部的很多实现,包括发 ...

  8. 104.virtual虚函数多态与异构数据结构

    #include "mainwindow.h" #include <QApplication> #include <list> #include <Q ...

  9. js生成验证码并验证的登录页面

    <!Doctype html> <html> <head> <meta charset="utf-8"/> <title> ...

  10. IDEA集成Python插件,SDK配置

    (第一次写在博客园添加随笔, 会有些生硬,有不对的地方和描述错误之处希望可以指出) 最近在学习一个新的知识点,涉及到Python的使用,因为第一次接触很多地方都不是很明白 ,好,废话不多说,现在直接上 ...