您的位置:首页 > 其它

举例说明Bitmap的用法

2012-07-22 20:36 363 查看
一般在android程序中把图片文件放在res/drawable目录下就可以通过R.drawable.id来使用,但在存储卡中的图片怎样引用呢?下面通过实现这个功能来介绍Bitmap的用法。

程序如下:

import java.io.File;

import android.app.Activity;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.ImageView;

import android.widget.TextView;

public class A10Activity extends Activity {

private Button b;

private ImageView iv;

private TextView tv;

private String fileName="sdcard/picture/红叶.jpg";

//private String fileName="sdcard/picture/红叶.jpg";这种写法是错误的,路径不是以

//设备开头

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

b=(Button)findViewById(R.id.button);

b.setOnClickListener(new OnClickListener(){

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

iv=(ImageView)findViewById(R.id.imageview);

tv=(TextView)findViewById(R.id.textview);

File f=new File(fileName);

//先判断图片文件是否存在

if(f.exists()){

//如果存在,通过Bitmap将图片放入ImageView中显示出来

/*BitmapFactory(Android.graphics.BitmapFactory)是Android API提供的对象,该对象

*的decodeFile()方法将手机中的图片文件转换成Bitmap对象。*/

Bitmap bm=BitmapFactory.decodeFile(fileName);

iv.setImageBitmap(bm);

tv.setText(fileName);

}

else{

tv.setText("文件不存在");

}

}

});

}

}

BitmapFactory也提供了其他方法,例如decodeResource()可以将res/drawable内预先存入的图片文件转换成Bitmap对象,decodeStream()方法可将InputStream转化成Bitmap对象。

下面这个例子是利用Matrix.setRotate()方法来实现ImageView的旋转。原理是将ImageView放入Bitmap中,然后利用Bitmap.createBitmap()方法来创建新的Bitmap对象,在创建的同时,Matrix对象里的setRotate()方法动态旋转新创建的Bitmap.然后将旋转好的Bitmap对象以新构造的方式创建新的Bitmap,并将其放入原来的ImageView中。

程序如下所示:

import android.app.Activity;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.graphics.Matrix;

import android.graphics.drawable.BitmapDrawable;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.ImageView;

import android.widget.TextView;

public class A11Activity extends Activity {

private ImageView iv;

private TextView tv;

private Button left,right;

private int times;

private int angle;

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

times=1;

angle=1;

iv=(ImageView)findViewById(R.id.iv);

tv=(TextView)findViewById(R.id.tv);

left=(Button)findViewById(R.id.left);

left.setText("向左转");

right=(Button)findViewById(R.id.right);

right.setText("向右转");

final Bitmap bmp=BitmapFactory.decodeResource(getResources(), R.drawable.a); //自己引入一张图片a.png

final int width=bmp.getWidth();

final int height=bmp.getHeight();

iv.setImageBitmap(bmp);

left.setOnClickListener(new OnClickListener(){

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

angle--;

if(angle<-20){ //设置最多旋转20度

angle=-20;

}

int width01=width*times;

int height01=height*times;

float width02=(float)(width01/width);

float height02=(float)(width02/height);

Matrix m=new Matrix();

m.postScale(width02, height02);

m.setRotate(5*angle);

Bitmap bmp01=Bitmap.createBitmap(bmp, 0, 0, width, height, m, true);

BitmapDrawable bd=new BitmapDrawable(bmp01);

iv.setImageDrawable(bd);

tv.setText(Integer.toString(5*angle));

}

});

right.setOnClickListener(new OnClickListener(){

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

angle++;

if(angle>20){

angle=20;

}

int width01=width*times;

int height01=height*times;

float width02=(float)(width01/width);

float height02=(float)(width02/height);

Matrix m=new Matrix();

m.postScale(width02, height02);

m.setRotate(5*angle);

Bitmap bmp01=Bitmap.createBitmap(bmp, 0, 0, width, height, m, true);

BitmapDrawable bd=new BitmapDrawable(bmp01);

iv.setImageDrawable(bd);

tv.setText(Integer.toString(5*angle));

}

});

}

}

res/layout/main.xml如下:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

<TextView

android:id="@+id/tv"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/hello" />

<Button

android:id="@+id/left"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

/>

<Button

android:id="@+id/right"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

/>

<ImageView

android:id="@+id/iv"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

/>

</LinearLayout>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: