Android----Bitmap、Matrix

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

:Bitmapcanvas

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

1:2种引用方式
ui

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

◆声明Bitmap对象spa

private Bitmap bitmap;//声明Bitmap对象

◆资源引用,得到Bitmap对象code

第一种载入资源的方式
        bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.a1);

(2)利用BitmapDrawable建立Bitmap
orm

◆声明Bitmap、BitmapDrawable对象对象

private Bitmap bitmap;//声明Bitmap对象
private BitmapDrawable bitmapDrawable;//声明bitmapDrawable对象

◆资源引用得到BitmapDrawable对象blog

// 第二种载入资源的方式
        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)的位置上

093431643.jpg


你曾经说我走之后

  • 但愿还有联络

  • 可以聆听彼此的苦乐

  • 说实在的

  • 我已不能理智对待了

  • C_0004.gif

相关文章
相关标签/搜索