**********************************************************************
android 实现图片的翻转
**********************************************************************
1 2 3 4 5 6 7 | Resources res = this .getContext().getResources(); img = BitmapFactory.decodeResource(res, R.drawable.aa); Matrix matrix = new Matrix(); matrix.postRotate( 180 ); /*翻转180度*/ int width = img.getWidth(); int height = img.getHeight(); img_a = Bitmap.createBitmap(img, 0 , 0 , width, height, matrix, true ); |
然后可以直接把img_a draw到画布上,canvas.drawBitmap(img_a, 10, 10, p);
Matrix 是一个处理翻转、缩放等图像效果的重要类,Matrix.postScale 可设置缩放比例,默认为1
**********************************************************************
android 实现图片的旋转
**********************************************************************
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | public class ex04_22 extends Activity{ private ImageView mImageView; private Button btn1,btn2; private TextView mTextView; private AbsoluteLayout layout1; private int ScaleTimes= 1 ,ScaleAngle= 1 ; @Override public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.main); mImageView=(ImageView)findViewById(R.id.myImageView); final Bitmap bmp=BitmapFactory.decodeResource( this .getResources(),R.drawable.ex04_22_1); final int widthOrig=bmp.getWidth(); final int heightOrig=bmp.getHeight(); mImageView.setImageBitmap(bmp); btn1=(Button)findViewById(R.id.myButton1); btn1.setOnClickListener( new OnClickListener(){ public void onClick(View v){ ScaleAngle--; if (ScaleAngle<- 60 ){ ScaleAngle=- 60 ; } int newWidth=widthOrig*ScaleTimes; int newHeight=heightOrig*ScaleTimes; float scaleWidth=(( float )newWidth)/widthOrig; float scaleHeight=(( float )newHeight)/heightOrig; Matrix matrix= new Matrix(); matrix.postScale(scaleWidth, scaleHeight); matrix.setRotate( 5 *ScaleAngle); Bitmap resizeBitmap=Bitmap.createBitmap(bmp, 0 , 0 , widthOrig, heightOrig, matrix, true ); BitmapDrawable myNewBitmapDrawable= new BitmapDrawable(resizeBitmap); mImageView.setImageDrawable(myNewBitmapDrawable); } }); btn2=(Button)findViewById(R.id.myButton2); btn2.setOnClickListener( new OnClickListener(){ public void onClick(View v){ ScaleAngle++; if (ScaleAngle> 60 ){ ScaleAngle= 60 ; } int newWidth=widthOrig*ScaleTimes; int newHeight=heightOrig*ScaleTimes; float scaleWidth=(( float )newWidth)/widthOrig; float scaleHeight=(( float )newHeight)/heightOrig; Matrix matrix= new Matrix(); matrix.postScale(scaleWidth, scaleHeight); matrix.setRotate( 5 *ScaleAngle); Bitmap resizeBitmap=Bitmap.createBitmap(bmp, 0 , 0 , widthOrig, heightOrig, matrix, true ); BitmapDrawable myNewBitmapDrawable= new BitmapDrawable(resizeBitmap); mImageView.setImageDrawable(myNewBitmapDrawable); } }); } |
**********************************************************************
实现画面淡入淡出效果可以用 :setAlpha(alpha);
alpha从255,逐渐递减!
**********************************************************************
如何实现屏幕的滚动效果,这里有两个关键点,一个是实现OnGestureListener,以便在触摸事件发生的时候,被回调。包括按下,滚动等等,按照API文档,需要分两步来实现检测手势行为。
1)创建GestureDetector实例
2) 在onTouchEvent()方法中调用GestureDetector的onTouchEvent()方法。
另一个关键点是自己实现一个简单的View,来绘制图片。
代码如下所示。由于,我们不需要使用layout定义,所以不需要提供xml文件。
直接在程序里面setContentView()即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | package com.j2medev; import android.app.Activity; import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Paint; import android.os.Bundle; import android.view.GestureDetector; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.view.GestureDetector.OnGestureListener; public class HorizontalScroll extends Activity implements OnGestureListener { private static final int X_MAX = 800 ; private static final int Y_MAX = 600 ; private int scrollX = 0 ; private int scrollY = 0 ; MyView main; Bitmap bmp; Bitmap adapt; Resources res; Paint paint; GestureDetector gestureScanner; @Override public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); gestureScanner = new GestureDetector( this ); paint = new Paint(); res = getResources(); bmp = BitmapFactory.decodeResource(res, R.drawable.arc); adapt = Bitmap.createBitmap(bmp); main = new MyView( this ); setContentView(main, new ViewGroup.LayoutParams( 800 , 600 )); } @Override public boolean onTouchEvent(MotionEvent me) { return gestureScanner.onTouchEvent(me); } public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { main.handleScroll(distanceX, distanceY); return true ; } public boolean onDown(MotionEvent e) { return true ; } public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { return true ; } public void onLongPress(MotionEvent e) { } public void onShowPress(MotionEvent e) { } public boolean onSingleTapUp(MotionEvent e) { return true ; } // ////////////////// // ///////////////// // //////////////// class MyView extends View { public MyView(Context context) { super (context); } @Override protected void onDraw(Canvas canvas) { canvas.drawBitmap(adapt, -scrollX, -scrollY, paint); } public void handleScroll( float distX, float distY) { // X-Axis //////////////////////////////// if (distX > 6.0 ) { if (scrollX < 460 ) { scrollX += 15 ; } } else if (distX <- 6.0 ) { if (scrollX >= 15 ) { scrollX -= 15 ; } } // ////////////////////////////////////////// // Y-AXIS ////////////////////////////////// if (distY > 6.0 ) { if (scrollY < 100 ) { scrollY += 15 ; } } else if (distY <- 6.0 ) { if (scrollY >= 15 ) { scrollY -= 15 ; } } // ////////////////////////////////////////// // // if ((scrollX <= 480) && (scrollY <= 120)) { // adapt = Bitmap.createBitmap(bmp, scrollX, scrollY, 320, 480); // invalidate(); // } invalidate(); } } } |
**********************************************************************
教你在谷歌Android平台中处理图片
**********************************************************************
操作图像像素
现在你可以对单独的像素进行处理了。通过使用android.graphics.Bitmap API中的getPixels,可以加载像素到一个整数数组中。
在本文例子中,你将按照一定规则对每一个像素实现着色。经过这个处理后,所有的像素将被转化为一个范围在0到255的字节码。
android.graphics.Bitmap API中的setPixels则用来加载这个整数数组到一个图像中。
最后一步是通过ImageView变量mIV来更新屏幕。以下是实现这个染色过程的代码片段。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | private void TintThePicture( int deg) { int [] pix = new int [picw * pich]; mBitmap.getPixels(pix, 0 , picw, 0 , 0 , picw, pich); int RY, GY, BY, RYY, GYY, BYY, R, G, B, Y; double angle = ( 3 .14159d * ( double )deg) / 180 .0d; int S = ( int )( 256 .0d * Math.sin(angle)); int C = ( int )( 256 .0d * Math.cos(angle)); for ( int y = 0 ; y <pich; y++)= "" for = "" ( int = "" x= "0;" <picw;= "" x++)= "" {= "" int = "" index= "y" *= "" picw= "" += "" x;= "" r= "(pix[index]" >> 16 ) & 0xff ; int g = (pix[index] >> 8 ) & 0xff ; int b = pix[index] & 0xff ; RY = ( 70 * r - 59 * g - 11 * b) / 100 ; GY = (- 30 * r + 41 * g - 11 * b) / 100 ; BY = (- 30 * r - 59 * g + 89 * b) / 100 ; Y = ( 30 * r + 59 * g + 11 * b) / 100 ; RYY = (S * BY + C * RY) / 256 ; BYY = (C * BY - S * RY) / 256 ; GYY = (- 51 * RYY - 19 * BYY) / 100 ; R = Y + RYY; R = (R < 0 ) &# 63 ; 0 : ((R > 255 ) &# 63 ; 255 : R); G = Y + GYY; G = (G < 0 ) &# 63 ; 0 : ((G > 255 ) &# 63 ; 255 : G); B = Y + BYY; B = (B < 0 ) &# 63 ; 0 : ((B > 255 ) &# 63 ; 255 : B); pix[index] = 0xff000000 | (R << 16 ) | (G << 8 ) | B; } Bitmap bm = Bitmap.createBitmap(picw, pich, false ); bm.setPixels(pix, 0 , picw, 0 , 0 , picw, pich); // Put the updated bitmap into the main view mIV.setImageBitmap(bm); mIV.invalidate(); mBitmap = bm; pix = null ; }</pich;> |
**********************************************************************
android 图片的放大和缩小
**********************************************************************
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | public class ex04_22 extends Activity{ private ImageView mImageView; private Button btn1,btn2; private TextView mTextView; private AbsoluteLayout layout1; private Bitmap bmp; private int id= 0 ; private int displayWidth,displayHeight; private float scaleWidth= 1 ,scaleHeight= 1 ; private final static String filename= "/data/data/ex04_22.lcs/ex04_22_2.png" ; @Override public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.main); //取得屏幕分辨率 DisplayMetrics dm= new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); displayWidth=dm.widthPixels; displayHeight=dm.heightPixels- 80 ; bmp=BitmapFactory.decodeResource( this .getResources(),R.drawable.ex04_22_1); layout1=(AbsoluteLayout)findViewById(R.id.layout1); mImageView=(ImageView)findViewById(R.id.myImageView); btn1=(Button)findViewById(R.id.myButton1); btn1.setOnClickListener( new OnClickListener(){ public void onClick(View v){ small(); } }); btn2=(Button)findViewById(R.id.myButton2); btn2.setOnClickListener( new OnClickListener(){ public void onClick(View v){ big(); } }); } private void small(){ //获得Bitmap的高和宽 int bmpWidth=bmp.getWidth(); int bmpHeight=bmp.getHeight(); //设置缩小比例 double scale= 0.8 ; //计算出这次要缩小的比例 scaleWidth=( float )(scaleWidth*scale); scaleHeight=( float )(scaleHeight*scale); //产生resize后的Bitmap对象 Matrix matrix= new Matrix(); matrix.postScale(scaleWidth, scaleHeight); Bitmap resizeBmp=Bitmap.createBitmap(bmp, 0 , 0 , bmpWidth, bmpHeight, matrix, true ); if (id== 0 ){ layout1.removeView(mImageView); } else { layout1.removeView((ImageView)findViewById(id)); } id++; ImageView imageView= new ImageView( this ); imageView.setId(id); imageView.setImageBitmap(resizeBmp); layout1.addView(imageView); setContentView(layout1); btn2.setEnabled( true ); } private void big(){ //获得Bitmap的高和宽 int bmpWidth=bmp.getWidth(); int bmpHeight=bmp.getHeight(); //设置缩小比例 double scale= 1.25 ; //计算出这次要缩小的比例 scaleWidth=( float )(scaleWidth*scale); scaleHeight=( float )(scaleHeight*scale); //产生resize后的Bitmap对象 Matrix matrix= new Matrix(); matrix.postScale(scaleWidth, scaleHeight); Bitmap resizeBmp=Bitmap.createBitmap(bmp, 0 , 0 , bmpWidth, bmpHeight, matrix, true ); if (id== 0 ){ layout1.removeView(mImageView); } else { layout1.removeView((ImageView)findViewById(id)); } id++; ImageView imageView= new ImageView( this ); imageView.setId(id); imageView.setImageBitmap(resizeBmp); layout1.addView(imageView); setContentView(layout1); if (scaleWidth*scale*bmpWidth>displayWidth||scaleHeight*scale*scaleHeight>displayHeight){ btn2.setEnabled( false ); } } } |
xml文件
<&#63;xml version="1.0" encoding="utf-8"&#63;>
*********************************************************************
android 图片透明度处理代码
*********************************************************************
1 2 3 4 5 6 7 8 9 10 | public static Bitmap setAlpha(Bitmap sourceImg, int number) { int [] argb = new int [sourceImg.getWidth() * sourceImg.getHeight()]; sourceImg.getPixels(argb, 0 , sourceImg.getWidth(), 0 , 0 ,sourceImg.getWidth(), sourceImg.getHeight()); // 获得图片的ARGB值 number = number * 255 / 100 ; for ( int i = 0 ; i <argb.length; i++)= "" {= "" argb= "(number" << 24 )= "" |= "" (argb= "" &= "" 0x00ffffff );= "" 修改最高 2 位的值= "" }= "" sourceimg= "Bitmap.createBitmap(argb," sourceimg.getwidth(),= "" sourceimg.getheight(),= "" config.argb_8888);= "" return = "" sourceimg;= "" }<= "" pre= "" > </argb.length;> |
以上就是涉及到了Android图片处理的所有内容,包括android图片反转、android 图片翻转、android 图片旋转、实现画面淡入淡出效果、android 图片的放大和缩小以及教你在谷歌Android平台中处理图片。