android matrix map,Android----Bitmap、Matrix

本文详细介绍了Bitmap在Android中的使用,包括两种资源引用方式(BitmapFactory和BitmapDrawable)以及三种绘制图形的方法(Canvas直接绘制、Rect裁剪绘制和BitmapDrawable设置填充区域绘制)。通过自定义SurfaceView实现图片的绘制,展示了如何在界面中显示Bitmap图像。
摘要由CSDN通过智能技术生成

Bitmap作为图片的一种承载方式,他可以提供图片文件的信息,也可以对图片做出相应的效果与操作。

一:Bitmap

Bitmap作为图片的一种承载方式,他可以提供图片文件的信息,也可以对图片做出相应的效果与操作。他有两种资源引用方式和三种绘制图形的方式。

1:2种引用方式

(1)利用BitmapFactory工厂的形式创建Bitmap

◆声明Bitmap对象

private Bitmap bitmap;//声明Bitmap对象

◆资源引用,获得Bitmap对象第一种载入资源的方式

bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.a1);

(2)利用BitmapDrawable创建Bitmap

◆声明Bitmap、BitmapDrawable对象private Bitmap bitmap;//声明Bitmap对象

private BitmapDrawable bitmapDrawable;//声明bitmapDrawable对象

◆资源引用获得BitmapDrawable对象// 第二种载入资源的方式

bitmapDrawable = (BitmapDrawable) getResources().getDrawable(

R.drawable.a1);

◆获得Bitmap对象bitmap = bitmapDrawable.getBitmap();//得到bitmap对象

2:3种绘制图形的方式

(1)通过画布Canvas对象的drawBitmap方法绘制// 第一种资源绘制方式

canvas.drawBitmap(bitmap, 0, 0, null); //从(0,0)点开始绘制图片大小的Bitmap

(2)通过Rect(负责图形的裁剪)和RectF(负责填充的区域)绘制// 第二种资源绘制方式

Rect rect = new Rect(0,0,10,10);//图形裁剪,从00开始裁剪,裁剪的图片大小为10*10

RectF rectf = new RectF(20,20,100,100);//将裁剪的图片绘制到起点为20,20,大小为80*80的区域上

canvas.drawBitmap(bitmap, rect, rectf, null);

(3)通过bitmapDrawable的setbounds方法设置填充区域,调用对象的draw方法绘制// 第三种资源绘制方式

bitmapDrawable.setBounds(0, 0, 300, 300);// 从00开始,图片填充到300*300的区域上

bitmapDrawable.draw(canvas);// 绘制

以上的几种方式可以任意的组合,均可以达到效果。

二:具体应用

功能:继承自SurfaceView,自定义视图,完成 图片的绘制

1:继承自,SurfaceView,重写三个方法,自定义绘制方法(注意画布的锁定与解锁)public class MyView extends SurfaceView implements Callback {

private Bitmap bitmap;//声明Bitmap对象

private BitmapDrawable bitmapDrawable;//声明bitmapDrawable对象

public MyView(Context context) {

super(context);

getHolder().addCallback(this);

// 第一种载入资源的方式

// bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.a1);

// 第二种载入资源的方式

bitmapDrawable = (BitmapDrawable) getResources().getDrawable(

R.drawable.a1);

bitmap = bitmapDrawable.getBitmap();//得到bitmap对象

}

public void draw() {

Canvas canvas = getHolder().lockCanvas();// 锁定画布

canvas.drawColor(Color.WHITE);

// 第一种资源绘制方式

// canvas.drawBitmap(bitmap, 0, 0, null); //从(0,0)点开始绘制图片大小的Bitmap

// 第二种资源绘制方式

// Rect rect = new Rect(0,0,10,10);//图形裁剪,从00开始裁剪,裁剪的图片大小为10*10

// RectF rectf = new

// RectF(20,20,100,100);//将裁剪的图片绘制到起点为20,20,大小为80*80的区域上

// canvas.drawBitmap(bitmap, rect, rectf, null);

// 第三种资源绘制方式

bitmapDrawable.setBounds(0, 0, 300, 300);// 从00开始,图片填充到300*300的区域上

bitmapDrawable.draw(canvas);// 绘制

getHolder().unlockCanvasAndPost(canvas);// 解锁画布

}

@Override

public void surfaceChanged(SurfaceHolder holder, int format, int width,

int height) {

}

@Override

public void surfaceCreated(SurfaceHolder holder) {

draw();// 调用

}

@Override

public void surfaceDestroyed(SurfaceHolder holder) {

}

}

2:主界面中引入自定义视图public class MainActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(new MyView(this));//加载自定义视图

}

3:结果:从界面的(0,0)点平铺到(300,300)的位置上

39bd77e04acede8d52fd06957545fb18.png

你曾经说我走以后希望还有联络

能够聆听彼此的苦乐

说实在的

我已不能理智对待了

12572d897561de31a2f969c6c66620a1.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值