zoukankan      html  css  js  c++  java
  • android图像处理(3)底片效果

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

    算法原理:将当前像素点的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.   
      3. import android.content.Context;  
      4. import android.graphics.Bitmap;  
      5. import android.graphics.BitmapFactory;  
      6. import android.graphics.Canvas;  
      7. import android.graphics.Color;  
      8. import android.graphics.Paint;  
      9. import android.util.AttributeSet;  
      10. import android.widget.ImageView;  
      11.   
      12. public class ColorView extends ImageView {  
      13.   
      14.     private Paint myPaint = null;  
      15.     private Bitmap bitmap = null;  
      16.     private int width,height;  
      17.     private int[] oldPixels;    
      18.     private int[] newPixels;    
      19.     private int color,color2;  
      20.     private int pixelsR,pixelsG,pixelsB,pixelsA,pixelsR2,pixelsG2,pixelsB2;  
      21.       
      22.     public ColorView(Context context, AttributeSet attrs)  
      23.     {  
      24.         super(context, attrs);  
      25.         bitmap = BitmapFactory.decodeResource(context.getResources(),R.drawable.ww);   
      26.         width = bitmap.getWidth();    
      27.         height = bitmap.getHeight();  
      28.         oldPixels = new int[width*height];   
      29.         newPixels = new int[width*height];  
      30.         invalidate();  
      31.     }  
      32.     @Override  
      33.     protected void onDraw(Canvas canvas) {  
      34.         super.onDraw(canvas);   
      35.         //获取像素  
      36.         bitmap.getPixels(oldPixels, 0, width, 0, 0, width, height);  
      37.           
      38.         for(int i = 1;i < height*width; i++){  
      39.                 color = oldPixels[i];  
      40.                 //获取RGB分量  
      41.                 pixelsA = Color.alpha(color);  
      42.                 pixelsR = Color.red(color);  
      43.                 pixelsG = Color.green(color);  
      44.                 pixelsB = Color.blue(color);  
      45.                   
      46.                 //转换  
      47.                 pixelsR = (255 - pixelsR);  
      48.                 pixelsG = (255 - pixelsG);  
      49.                 pixelsB = (255 - pixelsB);  
      50.                 //均小于等于255大于等于0  
      51.                 if(pixelsR > 255){  
      52.                     pixelsR = 255;  
      53.                 }  
      54.                 else if(pixelsR < 0){  
      55.                     pixelsR = 0;  
      56.                 }  
      57.                 if(pixelsG > 255){  
      58.                     pixelsG = 255;  
      59.                 }  
      60.                 else if(pixelsG < 0){   
      61.                     pixelsG = 0;  
      62.                 }  
      63.                 if(pixelsB > 255){  
      64.                     pixelsB = 255;  
      65.                 }  
      66.                 else if(pixelsB < 0){  
      67.                     pixelsB = 0;  
      68.                 }  
      69.                 //根据新的RGB生成新像素  
      70.                 newPixels[i] = Color.argb(pixelsA, pixelsR, pixelsG, pixelsB);  
      71.                   
      72.         }  
      73.         //根据新像素生成新图片  
      74.         bitmap.setPixels(newPixels, 0, width, 0, 0, width, height);  
      75.         canvas.drawBitmap(bitmap,0,0,myPaint);  
      76.     }  
  • 相关阅读:
    正则学习笔记 主要是C#或Javascript
    禁止页面复制、保存等常用js命令
    Webkit几个CSS效果和JS控制
    marquee用法的详细解释让文字动起来
    js比较两个时间的大小
    关于System.MissingMethodException
    Windows mobile XmlTextWriter FileStream 路径问题
    jQuery UI插件sortable中文帮助文档
    asp.net中用Eval绑定时间的格式
    jQuery图表插件Flot
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/6722086.html
Copyright © 2011-2022 走看看