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

算法原理:用前一个像素点的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 图像处理系列合集

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

  2. Android图像处理实例教程

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

  3. Android图像处理1

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. Traversal with a for loop

    A lot of computations involve processing a string one character at a time. Often they start at the b ...

  2. HD-ACM算法专攻系列(2)——Rightmost Digit

    题目描述: 源码: /**/ #include"iostream" using namespace std; int main() { int t, mod; long long ...

  3. 外部样式表声明的样式并不会进入style对象

    在网页设计当中,我们注重网页的行为(js).结构(HTLM).样式(css)分离开 内联样式表或者内部样式表声明的样式信息都会进入style对象. 我们可以测试一下: 但是我们的外部样式表,也就是通过 ...

  4. HDU 1789 Doing Homework again【贪心】

    题意:给出n个作业的截止时间,和该作业没有完成会被扣掉的分数.问最少会被扣掉多少分. 第一次做这一题是好久之前,当时不会(不会处理两个关键字关系@_@)---现在还是不会---看了题解---原来是这样 ...

  5. RSA不对称加密

    package sinRsa; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io ...

  6. 八 ROI(region of interest)和泛洪填充

    一.ROI 感兴趣区(Region of Interest,ROIs) 是图像的一部分,它通过在图像上选择或使用诸如设定阈值(thresholding) 或者从其他文件(如矢量> 转换获得等方法 ...

  7. 冒泡排序php

    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /> <b ...

  8. Java基础学习总结(9)——this关键字

    一.this关键字 this是一个引用,它指向自身的这个对象. 看内存分析图: 假设我们在堆内存new了一个对象,在这个对象里面你想象着他有一个引用this,this指向这个对象自己,所以这就是thi ...

  9. LeetCode 107 Binary Tree Level Order Traversal II(二叉树的层级顺序遍历2)(*)

    翻译 给定一个二叉树,返回从下往上遍历经过的每一个节点的值. 从左往右,从叶子到节点. 比如: 给定的二叉树是 {3,9,20,#,#,15,7}, 3 / \ 9 20 / \ 15 7 返回它从下 ...

  10. vue22 路由

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...