参考http://blog.csdn.net/sunboy_2050/article/details/7308805



package com.example.tt;import android.app.Activity;import android.content.Context;import android.graphics.Bitmap;import android.graphics.Bitmap.Config;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.Window;import android.widget.ScrollView;import android.widget.Scroller;public class MainActivity extends  Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(new MyView(getApplicationContext()));}class MyView extends View{public MyView(Context context) {super(context);}@Overrideprotected void onDraw(Canvas canvas) {// TODO Auto-generated method stubsuper.onDraw(canvas);canvas.drawColor(Color.GRAY);Bitmap bitmapSrc=BitmapFactory.decodeResource(getResources(), R.drawable.img);int bmpSrcW=bitmapSrc.getWidth();int bmpSrcH=bitmapSrc.getHeight();Paint paint=new Paint();paint.setTextSize(50);paint.setColor(Color.RED);canvas.drawText("宽:"+bmpSrcW+" 高:"+bmpSrcH, 10, 60,paint );canvas.translate(0, 60);canvas.drawBitmap(bitmapSrc, 0, 0, null);/* * int[] pixels=new int [bmpSrcH*bmpSrcW]; * bitmapSrc.getPixels(pixels, 0, bmpSrcW, 0, 0, bmpSrcW, bmpSrcH); *  * 把图片中的各个像素的值放到了pixels数组中,bitmap中像素按从左到右,从上到下次序依次放到pixels中, * 第三个参数通常使用图片宽度即可,第二个参数是从pixels数组中那个位置开始存放像素值。 * 第4、5个参数是bitmap中像素坐标 * 最后两个是要获取的图片的宽高 *  */ Bitmap newBmp = change1(bitmapSrc, bmpSrcW, bmpSrcH);canvas.drawBitmap(newBmp, bmpSrcW+10,0 , null); newBmp = change2(bitmapSrc, bmpSrcW, bmpSrcH);canvas.drawBitmap(newBmp, 0, bmpSrcH+10 , null); newBmp = change3(bitmapSrc, bmpSrcW, bmpSrcH);canvas.drawBitmap(newBmp,  bmpSrcW+10, bmpSrcH+10 , null);newBmp = change4(bitmapSrc, bmpSrcW, bmpSrcH);canvas.drawBitmap(newBmp,0 , ( bmpSrcH+10)*2 , null);newBmp = change5(bitmapSrc, bmpSrcW, bmpSrcH);canvas.drawBitmap(newBmp,bmpSrcW+10 , ( bmpSrcH+10)*2 , null);newBmp = change6(bitmapSrc, bmpSrcW, bmpSrcH);canvas.drawBitmap(newBmp,0 , ( bmpSrcH+10)*3 , null);newBmp = change7(bitmapSrc, bmpSrcW, bmpSrcH);canvas.drawBitmap(newBmp,bmpSrcW+10 , ( bmpSrcH+10)*3 , null);}/** * 对角调换 * @param bitmapSrc * @param bmpSrcW * @param bmpSrcH * @return */private Bitmap change1(Bitmap bitmapSrc, int bmpSrcW, int bmpSrcH) {int[] pixels=new int [bmpSrcH*bmpSrcW];bitmapSrc.getPixels(pixels, 0, bmpSrcW, 0, 0, bmpSrcW, bmpSrcH);for (int i = 0; i < pixels.length/2; i++) {int tmp=pixels[i];pixels[i]=pixels[pixels.length-1-i];pixels[pixels.length-1-i]=tmp;}Bitmap newBmp=Bitmap.createBitmap(pixels, 0, bmpSrcW, bmpSrcW, bmpSrcH, Config.ARGB_8888);return newBmp;} /** * 上下对调 * @param bitmapSrc * @param bmpSrcW * @param bmpSrcH * @return */private Bitmap change2(Bitmap bitmapSrc, int bmpSrcW, int bmpSrcH) {int[] pixels=new int [bmpSrcH*bmpSrcW];bitmapSrc.getPixels(pixels, 0, bmpSrcW, 0, 0, bmpSrcW, bmpSrcH);for (int i = 0; i < bmpSrcH/2; i++) {for (int j = 0; j < bmpSrcW; j++) {int tmp=pixels[i*bmpSrcW+j];pixels[i*bmpSrcW+j]=pixels[ ( bmpSrcH-1-i) * bmpSrcW+j    ];pixels[ ( bmpSrcH-1-i) * bmpSrcW+j    ]=tmp;}}Bitmap newBmp=Bitmap.createBitmap(pixels, 0, bmpSrcW, bmpSrcW, bmpSrcH, Config.ARGB_8888);return newBmp;}/** * 左右对调 * @param bitmapSrc * @param bmpSrcW * @param bmpSrcH * @return */private Bitmap change3(Bitmap bitmapSrc, int bmpSrcW, int bmpSrcH) {int[] pixels=new int [bmpSrcH*bmpSrcW];bitmapSrc.getPixels(pixels, 0, bmpSrcW, 0, 0, bmpSrcW, bmpSrcH);for (int i = 0; i < bmpSrcW/2; i++) {for (int j = 0; j < bmpSrcH; j++) {int tmp=pixels[j*bmpSrcW+i];pixels[j*bmpSrcW+i]=pixels[ (j+1)*bmpSrcW-i-1   ];pixels[  (j+1)*bmpSrcW-i -1  ]=tmp;}}Bitmap newBmp=Bitmap.createBitmap(pixels, 0, bmpSrcW, bmpSrcW, bmpSrcH, Config.ARGB_8888);return newBmp;}/** * 截取一块 * @param bitmapSrc * @param bmpSrcW * @param bmpSrcH * @return */private Bitmap change4(Bitmap bitmapSrc, int bmpSrcW, int bmpSrcH) {int[] pixels=new int [bmpSrcH*bmpSrcW];for (int i = 0; i < pixels.length; i++) {pixels[i]=Color.BLUE;}bitmapSrc.getPixels(pixels, bmpSrcW*60+80, bmpSrcW, 80, 60,200 ,160 ); Bitmap newBmp=Bitmap.createBitmap(pixels, 0, bmpSrcW, bmpSrcW, bmpSrcH, Config.ARGB_8888);return newBmp;}/** * 截取一块并置于左上角 * @param bitmapSrc * @param bmpSrcW * @param bmpSrcH * @return */private Bitmap change5(Bitmap bitmapSrc, int bmpSrcW, int bmpSrcH) {int[] pixels=new int [bmpSrcH*bmpSrcW];for (int i = 0; i < pixels.length; i++) {pixels[i]=Color.BLUE;}bitmapSrc.getPixels(pixels,0, bmpSrcW, 80, 60,200 ,160 ); Bitmap newBmp=Bitmap.createBitmap(pixels, 0, bmpSrcW, bmpSrcW, bmpSrcH, Config.ARGB_8888);return newBmp;}/** * 默认背景透明 * @param bitmapSrc * @param bmpSrcW * @param bmpSrcH * @return */private Bitmap change6(Bitmap bitmapSrc, int bmpSrcW, int bmpSrcH) {int[] pixels=new int [bmpSrcH*bmpSrcW];bitmapSrc.getPixels(pixels,20, bmpSrcW, 80, 60,200 ,160 );Bitmap newBmp=Bitmap.createBitmap(pixels, 0, bmpSrcW, bmpSrcW, bmpSrcH, Config.ARGB_8888);return newBmp;}/** * 泛红效果 * @param bitmapSrc * @param bmpSrcW * @param bmpSrcH * @return */private Bitmap change7(Bitmap bitmapSrc, int bmpSrcW, int bmpSrcH) {int[] pixels=new int [bmpSrcH*bmpSrcW];bitmapSrc.getPixels(pixels,0, bmpSrcW, 0, 0,bmpSrcW ,bmpSrcH );for (int i = 0; i < pixels.length; i++) {int argb=pixels[i];//一个像素包含alpha,red,green,blue,分别占8位,组成一个32位的int值//argb占32位,即java中int类型的大小,左起前8位代表alpha(透明度),接着8位是red的值,然后8位是green,最后8位是blue,//8位二进制的最大值是2^8-1,即16进制0xff,10进制255 //  0xff  前24位是0,后8位是1,即   00000000 00000000 00000000 11111111//argb>>16后,左起前16位是0,接着8位是alpha,最后8位是red值,与0xff做 & 运算,(按位与,对应位同为1才是1,否则是0)//所以运算后前24位是0,后8位原来是1则还是1,原来是0则是0,所以后8位的值不变,前24位变为了0,所以就取出了red值,//green,blue值的取法类似 //可以使用Color.red(argb);获取该像素中的red值int r=  ( argb>> 16 )   &   0xff; int g=  ( argb>> 8 )   &   0xff;int b=    argb   &   0xff;   r=(int) (r*1.5);if (r>0xff) {r=0xff;}////g=(int) (g*1.2);//if (g>0xff) {//g=0xff;//}////b=(int) (b*1.2);//if (b>0xff) {//b=0xff;//}//0xff<<24,把透明度置为完全不透明(透明度表示后面的rgb颜色的加深程度,所以透明度值越大,颜色越深,透明度为0时表示完全透明)//0xff<<24后右起24位位0,左起8位为alpha。//r<<16后左起8位为0,右边16位为0,其他位为red值//g<<8后左起16位为0,右起8位为0,其他位为green值//使用 | 运算后就把argb拼接了起来得到了32位的值,即一个像素的值//可以使用Color.rgb();得到像素值argb= (0xff<<24)  | (r<<16)  | (g<<8) | b;pixels[i]=argb;}Bitmap newBmp=Bitmap.createBitmap(pixels, 0, bmpSrcW, bmpSrcW, bmpSrcH, Config.ARGB_8888);return newBmp;}}}


更多相关文章

  1. Bitmap在内存中加载
  2. [置顶] 一个类搞定Android适配!!
  3. Android(安卓)(最新)控件透明度,布局透明度,Activity透明度,颜色透
  4. 简单实现android侧边栏效果
  5. Android中的颜色表示的详解
  6. android 布局适应不同分辨率
  7. 软件工程之四则运算开发感悟与收获
  8. android中YUV转RGB的方法
  9. 闲话Android(安卓)之 屏幕大小、pixel、分辨率、dpi、dip

随机推荐

  1. Android(安卓)FragmentActivity Intent
  2. Android视频录制
  3. android之【部分控件】
  4. Android设计一个答题APP
  5. Android(安卓)Studio使用github教程
  6. Android一些常用的颜色值
  7. 10 Alternative Android(安卓)App Stores
  8. Android(安卓)加密解密
  9. Spinner选择框应用
  10. Android~~布局Layout