Android 照片特效

android 实现图片的翻转

1Resources res = this.getContext().getResources();
2        img = BitmapFactory.decodeResource(res, R.drawable.aa);
3        Matrix matrix = new Matrix(); 
4        matrix.postRotate(180);        /*翻转180度*/
5        int width = img.getWidth();
6        int height = img.getHeight();
7        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 实现图片的旋转

01public class ex04_22 extends Activity{
02     
03private ImageView mImageView;
04private Button btn1,btn2;
05private TextView mTextView;
06private AbsoluteLayout layout1;
07private int ScaleTimes=1,ScaleAngle=1;
08    @Override
09    public void onCreate(Bundle savedInstanceState) {
10        super.onCreate(savedInstanceState);
11        setContentView(R.layout.main);
12        mImageView=(ImageView)findViewById(R.id.myImageView);
13        final Bitmap bmp=BitmapFactory.decodeResource(this.getResources(),R.drawable.ex04_22_1);
14        final int widthOrig=bmp.getWidth();
15        final int heightOrig=bmp.getHeight();
16        mImageView.setImageBitmap(bmp);
17        btn1=(Button)findViewById(R.id.myButton1);
18        btn1.setOnClickListener(new OnClickListener(){
19         public void onClick(View v){
20          ScaleAngle--;
21          if(ScaleAngle<-60){
22           ScaleAngle=-60;
23          }
24          int newWidth=widthOrig*ScaleTimes;
25          int newHeight=heightOrig*ScaleTimes;
26          float scaleWidth=((float)newWidth)/widthOrig;
27          float scaleHeight=((float)newHeight)/heightOrig;
28          Matrix matrix=new Matrix();
29          matrix.postScale(scaleWidth, scaleHeight);
30          matrix.setRotate(5*ScaleAngle);
31          Bitmap resizeBitmap=Bitmap.createBitmap(bmp, 0, 0, widthOrig, heightOrig, matrix, true);
32          BitmapDrawable myNewBitmapDrawable=new BitmapDrawable(resizeBitmap);
33          mImageView.setImageDrawable(myNewBitmapDrawable);
34         }
35        });
36        btn2=(Button)findViewById(R.id.myButton2);
37        btn2.setOnClickListener(new OnClickListener(){
38         public void onClick(View v){
39          ScaleAngle++;
40          if(ScaleAngle>60){
41           ScaleAngle=60;
42          }
43          int newWidth=widthOrig*ScaleTimes;
44          int newHeight=heightOrig*ScaleTimes;
45          float scaleWidth=((float)newWidth)/widthOrig;
46          float scaleHeight=((float)newHeight)/heightOrig;
47          Matrix matrix=new Matrix();
48          matrix.postScale(scaleWidth, scaleHeight);
49          matrix.setRotate(5*ScaleAngle);
50          Bitmap resizeBitmap=Bitmap.createBitmap(bmp, 0, 0, widthOrig, heightOrig, matrix, true);
51          BitmapDrawable myNewBitmapDrawable=new BitmapDrawable(resizeBitmap);
52          mImageView.setImageDrawable(myNewBitmapDrawable);
53         }
54        });
55    }

**********************************************************************

实现画面淡入淡出效果可以用 :setAlpha(alpha);
alpha从255,逐渐递减!

**********************************************************************

如何实现屏幕的滚动效果,这里有两个关键点,一个是实现OnGestureListener,

以便在触摸事件发生的时候,被回调。包括按下,滚动等等,按照API文档,

需要分两步来实现检测手势行为。

1)创建GestureDetector实例

2) 在onTouchEvent()方法中调用GestureDetector的onTouchEvent()方法。

另一个关键点是自己实现一个简单的View,来绘制图片。

代码如下所示。由于,我们不需要使用layout定义,所以不需要提供xml文件。
直接在程序里面setContentView()即可。

001package com.j2medev;
002  
003import android.app.Activity;
004import android.content.Context;
005import android.content.res.Resources;
006import android.graphics.Bitmap;
007import android.graphics.BitmapFactory;
008import android.graphics.Canvas;
009import android.graphics.Paint;
010import android.os.Bundle;
011import android.view.GestureDetector;
012import android.view.MotionEvent;
013import android.view.View;
014import android.view.ViewGroup;
015import android.view.GestureDetector.OnGestureListener;
016  
017public class HorizontalScroll extends Activity implements OnGestureListener {
018private static final int X_MAX = 800;
019private static final int Y_MAX = 600;
020private int scrollX = 0;
021private int scrollY = 0;
022  
023MyView main;
024Bitmap bmp;
025Bitmap adapt;
026Resources res;
027Paint paint;
028GestureDetector gestureScanner;
029  
030@Override
031public void onCreate(Bundle savedInstanceState) {
032super.onCreate(savedInstanceState);
033  
034gestureScanner = new GestureDetector(this);
035paint = new Paint();
036  
037res = getResources();
038bmp = BitmapFactory.decodeResource(res, R.drawable.arc);
039adapt = Bitmap.createBitmap(bmp);
040  
041main = new MyView(this);
042setContentView(main, new ViewGroup.LayoutParams(800, 600));
043}
044  
045@Override
046public boolean onTouchEvent(MotionEvent me) {
047return gestureScanner.onTouchEvent(me);
048}
049  
050public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
051   float distanceY) {
052main.handleScroll(distanceX, distanceY);
053return true;
054}
055  
056public boolean onDown(MotionEvent e) {
057return true;
058}
059  
060public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
061   float velocityY) {
062return true;
063}
064  
065public void onLongPress(MotionEvent e) {
066}
067  
068public void onShowPress(MotionEvent e) {
069}
070  
071public boolean onSingleTapUp(MotionEvent e) {
072return true;
073}
074  
075// //
076// /
077//
078  
079class MyView extends View {
080public MyView(Context context) {
081   super(context);
082}
083  
084@Override
085protected void onDraw(Canvas canvas) {
086   canvas.drawBitmap(adapt, -scrollX, -scrollY, paint);
087}
088  
089public void handleScroll(float distX, float distY) {
090   // X-Axis
091  
092   if (distX > 6.0) {
093    if (scrollX < 460) {
094     scrollX += 15;
095    }
096   } else if (distX < -6.0) {
097    if (scrollX >= 15) {
098     scrollX -= 15;
099    }
100   }
101   // //
102  
103   // Y-AXIS //
104   if (distY > 6.0) {
105    if (scrollY < 100) {
106     scrollY += 15;
107    }
108   } else if (distY < -6.0) {
109    if (scrollY >= 15) {
110     scrollY -= 15;
111    }
112   }
113   // //
114   //
115   // if ((scrollX <= 480) && (scrollY <= 120)) {
116   // adapt = Bitmap.createBitmap(bmp, scrollX, scrollY, 320, 480);
117   // invalidate();
118   // }
119   invalidate();
120}
121}
122}

**********************************************************************

教你在谷歌Android平台中处理图片

操作图像像素

现在你可以对单独的像素进行处理了。通过使用android.graphics.Bitmap API中的

getPixels,可以加载像素到一个整数数组中。在本文例子中,你将按照一定规则对每一

个像素实现着色。经过这个处理后,所有的像素将被转化为一个范围在0到255的字节码。

android.graphics.Bitmap API中的setPixels则用来加载这个整数数组到一个图像中。

最后一步是通过ImageView变量mIV来更新屏幕。以下是实现这个染色过程的代码片段。

01private void TintThePicture(int deg) {
02   int[] pix = new int[picw * pich];
03   mBitmap.getPixels(pix, 0, picw, 0, 0, picw, pich);
04  
05   int RY, GY, BY, RYY, GYY, BYY, R, G, B, Y;
06   double angle = (3.14159d * (double)deg) / 180.0d;
07   int S = (int)(256.0d * Math.sin(angle));
08   int C = (int)(256.0d * Math.cos(angle));
09  
10    for (int y = 0; y < pich; y++)
11    for (int x = 0; x < picw; x++)
12       {
13       int index = y * picw + x;
14       int r = (pix[index] >> 16) & 0xff;
15       int g = (pix[index] >> 8) & 0xff;
16       int b = pix[index] & 0xff;
17       RY = ( 70 * r - 59 * g - 11 * b) / 100;
18       GY = (-30 * r + 41 * g - 11 * b) / 100;
19       BY = (-30 * r - 59 * g + 89 * b) / 100;
20       Y = ( 30 * r + 59 * g + 11 * b) / 100;
21       RYY = (S * BY + C * RY) / 256;
22       BYY = (C * BY - S * RY) / 256;
23       GYY = (-51 * RYY - 19 * BYY) / 100;
24       R = Y + RYY;
25       R = (R < 0) ? 0 : ((R > 255) ? 255 : R);
26       G = Y + GYY;
27       G = (G < 0) ? 0 : ((G > 255) ? 255 : G);
28       B = Y + BYY;
29       B = (B < 0) ? 0 : ((B > 255) ? 255 : B);
30       pix[index] = 0xff000000 | (R << 16) | (G << 8) | B;
31       }
32   
33    Bitmap bm = Bitmap.createBitmap(picw, pich, false);
34    bm.setPixels(pix, 0, picw, 0, 0, picw, pich);
35   
36    // Put the updated bitmap into the main view
37    mIV.setImageBitmap(bm);
38    mIV.invalidate();
39   
40    mBitmap = bm;
41    pix = null;
42 }

**********************************************************************

android 图片的放大和缩小

01public class ex04_22 extends Activity{
02private ImageView mImageView;
03private Button btn1,btn2;
04private TextView mTextView;
05private AbsoluteLayout layout1;
06private Bitmap bmp;
07private int id=0;
08private int displayWidth,displayHeight;
09private float scaleWidth=1,scaleHeight=1;
10private final static String filename="/data/data/ex04_22.lcs/ex04_22_2.png";
11@Override
12public void onCreate(Bundle savedInstanceState) {
13super.onCreate(savedInstanceState);
14setContentView(R.layout.main);
15//取得屏幕分辨率
16DisplayMetrics dm=new DisplayMetrics();
17getWindowManager().getDefaultDisplay().getMetrics(dm);
18displayWidth=dm.widthPixels;
19displayHeight=dm.heightPixels-80;
20bmp=BitmapFactory.decodeResource(this.getResources(),R.drawable.ex04_22_1);
21layout1=(AbsoluteLayout)findViewById(R.id.layout1);
22mImageView=(ImageView)findViewById(R.id.myImageView);
23btn1=(Button)findViewById(R.id.myButton1);
24btn1.setOnClickListener(new OnClickListener(){
25public void onClick(View v){
26small();
27}
28});
29btn2=(Button)findViewById(R.id.myButton2);
30btn2.setOnClickListener(new OnClickListener(){
31public void onClick(View v){
32big();
33}
34});
35}
36private void small(){
37//获得Bitmap的高和宽
38int bmpWidth=bmp.getWidth();
39int bmpHeight=bmp.getHeight();
40//设置缩小比例
41double scale=0.8;
42//计算出这次要缩小的比例
43scaleWidth=(float)(scaleWidth*scale);
44scaleHeight=(float)(scaleHeight*scale);
45//产生resize后的Bitmap对象
46Matrix matrix=new Matrix();
47matrix.postScale(scaleWidth, scaleHeight);
48Bitmap resizeBmp=Bitmap.createBitmap(bmp, 0, 0, bmpWidth, bmpHeight, matrix, true);
49if(id==0){
50layout1.removeView(mImageView);
51}
52else{
53layout1.removeView((ImageView)findViewById(id));
54}
55id++;
56ImageView imageView=new ImageView(this);
57imageView.setId(id);
58imageView.setImageBitmap(resizeBmp);
59layout1.addView(imageView);
60setContentView(layout1);
61btn2.setEnabled(true);
62}
63private void big(){
64//获得Bitmap的高和宽
65int bmpWidth=bmp.getWidth();
66int bmpHeight=bmp.getHeight();
67//设置缩小比例
68double scale=1.25;
69//计算出这次要缩小的比例
70scaleWidth=(float)(scaleWidth*scale);
71scaleHeight=(float)(scaleHeight*scale);
72//产生resize后的Bitmap对象
73Matrix matrix=new Matrix();
74matrix.postScale(scaleWidth, scaleHeight);
75Bitmap resizeBmp=Bitmap.createBitmap(bmp, 0, 0, bmpWidth, bmpHeight, matrix, true);
76if(id==0){
77layout1.removeView(mImageView);
78}
79else{
80layout1.removeView((ImageView)findViewById(id));
81}
82id++;
83ImageView imageView=new ImageView(this);
84imageView.setId(id);
85imageView.setImageBitmap(resizeBmp);
86layout1.addView(imageView);
87setContentView(layout1);
88if(scaleWidth*scale*bmpWidth>displayWidth||scaleHeight*scale*scaleHeight>displayHeight){
89btn2.setEnabled(false);
90}
91}
92}

xml文件

01<?xml version="1.0" encoding="utf-8"?>
02<AbsoluteLayout
03android:id="@+id/layout1"
04android:layout_width="fill_parent"
05android:layout_height="fill_parent"
06xmlns:android="http://schemas.android.com/apk/res/android"
07>
08<ImageView
09android:id="@+id/myImageView"
10android:layout_width="200px"
11android:layout_height="150px"
12android:src="@drawable/ex04_22_1"
13android:layout_x="0px"
14android:layout_y="0px"
15>
16</ImageView>
17<Button
18android:id="@+id/myButton1"
19android:layout_width="90px"
20android:layout_height="60px"
21android:text="缩小"
22android:textSize="18sp"
23android:layout_x="20px"
24android:layout_y="372px"
25>
26</Button>
27<Button
28android:id="@+id/myButton2"
29android:layout_width="90px"
30android:layout_height="60px"
31android:text="放大"
32android:textSize="18sp"
33android:layout_x="210px"
34android:layout_y="372px"
35>
36</Button>
37</AbsoluteLayout>

*********************************************************************

android 图片透明度处理代码

01public static Bitmap setAlpha(Bitmap sourceImg, int number) {
02  
03  int[] argb = new int[sourceImg.getWidth() * sourceImg.getHeight()];
04  
05  sourceImg.getPixels(argb, 0, sourceImg.getWidth(), 0, 0,sourceImg.getWidth(), sourceImg.getHeight());// 获得图片的ARGB值
06  
07  number = number * 255 / 100;
08  
09  for (int i = 0; i < argb.length; i++) {
10  
11  argb = (number << 24) | (argb & 0x00FFFFFF);// 修改最高2位的值
12  
13  }
14  
15  sourceImg = Bitmap.createBitmap(argb, sourceImg.getWidth(), sourceImg.getHeight(), Config.ARGB_8888);
16  
17  return sourceImg;
18  
19}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值