Android音视频学习(1): 通过三种方式绘制图片

主要的参考文章出处:http://www.cnblogs.com/renhui/p/7456956.html

今天对应的要学习的内容是:在 Android 平台绘制一张图片,使用至少 3 种不同的 API,ImageView,SurfaceView,自定义 View。

1. ImageView 绘制图片

Bitmap bitmap = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getPath() + File.separator + "11.jpg");
imageView.setImageBitmap(bitmap);

Bitmap的获取1、资源文件中获取/**
     * 将资源文件转换成Drawabled对象然后再进行转换*/
    public Bitmap getBitmap1(){
        Drawable db = getResources().getDrawable(R.drawable.logo_picc);
        BitmapDrawable drawable = (BitmapDrawable)db;
        
        Bitmap bitmap = drawable.getBitmap();    
        return bitmap;    
    }
    
    /**
     * 直接使用BitmapFactory进行转换*/
    public Bitmap getBitmap2(){
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.logo_picc);
        return bitmap;
    }
    
    /**
     * 使用Canvas进行转换*/
    public Bitmap getBitmap3(){
        Drawable db = getResources().getDrawable(R.drawable.logo_picc);
        Bitmap bitmap = Bitmap.createBitmap(db.getIntrinsicWidth(), db.getIntrinsicHeight(), 
                Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);       
            
        db.setBounds(0, 0, db.getIntrinsicWidth(), db.getIntrinsicHeight());       
        db.draw(canvas);
        
        return bitmap;
    }
2、
将sd中的文件转化成Bitmap对象。

/**
     * 先获取输入流,然后decode*/
    public Bitmap getBitmp1(String path){ 
        Bitmap bitmap =null;
        try {
            File file = new File(path);
            if(file.isFile()){
                InputStream input = new FileInputStream(file);
                BitmapFactory.Options  opt = new BitmapFactory.Options();   
                opt.inPreferredConfig = Bitmap.Config.RGB_565;
                opt.inPurgeable = true;
                opt.inInputShareable = true;
                opt.inSampleSize = 5;//这个是同比例缩放,5就表示同比例缩小一倍。图片文件太大如果不进行设置就会导致OOM错误
                bitmap = BitmapFactory.decodeStream(input, null, opt);
            }    
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        return bitmap;
    }
    
    /**
     * 直接使用BitmapFactory的decodeFile方法*/
    public Bitmap getBitmap2(String path){
        BitmapFactory.Options  opt = new BitmapFactory.Options();   
        opt.inPreferredConfig = Bitmap.Config.RGB_565;
        opt.inPurgeable = true;
        opt.inInputShareable = true;
        opt.inSampleSize = 5;//这个是同比例缩放,5就表示同比例缩小一倍。图片文件太大如果不进行设置就会导致OOM错误
        Bitmap bitmap = BitmapFactory.decodeFile(path, opt);
        
        return bitmap;
    }

2. SurfaceView 绘制图片

SurfaceView surfaceView = (SurfaceView) findViewById(R.id.surface);
surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
    @Override
    public void surfaceCreated(SurfaceHolder surfaceHolder) {

        if (surfaceHolder == null) {
            return;
        }

        Paint paint = new Paint();
        paint.setAntiAlias(true); //抗锯齿
        paint.setStyle(Paint.Style.STROKE);

        Bitmap bitmap = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getPath() + File.separator + "11.jpg");  // 获取bitmap
        Canvas canvas = surfaceHolder.lockCanvas();  // 先锁定当前surfaceView的画布
        canvas.drawBitmap(bitmap, 0, 0, paint); //执行绘制操作
        surfaceHolder.unlockCanvasAndPost(canvas); // 解除锁定并显示在界面上
    }

    @Override
    public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder surfaceHolder) {

    }
});

3.自定义view

public class CustomView extends View {

    Paint paint = new Paint();
    Bitmap bitmap;

    public CustomView(Context context) {
        super(context);
        paint.setAntiAlias(true);
        paint.setStyle(Paint.Style.STROKE);
        bitmap = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getPath() + File.separator + "11.jpg");  // 获取bitmap
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        // 不建议在onDraw做任何分配内存的操作
        if (bitmap != null) {
            canvas.drawBitmap(bitmap, 0, 0, paint);
        }
    }
}
注:别忘记了权限,否则是不会展示成功的。
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

猜你喜欢

转载自blog.csdn.net/qq_28334473/article/details/88323941