首页 > 其他分享 >【android】音视频开发一:绘制图片

【android】音视频开发一:绘制图片

时间:2023-02-16 16:11:57浏览次数:43  
标签:String bitmap paint android 音视频 绘制 public fileNamePath

本文目标

在 Android 平台绘制一张图片,使用至少 3 种不同的 API,ImageView,SurfaceView,自定义 View

绘制准备:申请手机权限

<!--添加权限-->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

之后动态申请权限

 /**
     * 请求权限
     */
    private void initPermissions() {
        permissionsList.clear();

        //判断哪些权限未授予
        for(String permission : permissions){
            if(ActivityCompat.checkSelfPermission(this,permission)!= PackageManager.PERMISSION_GRANTED){
                permissionsList.add(permission);
            }
        }

        //请求权限
        if(!permissionsList.isEmpty()){
            String[] permissions = permissionsList.toArray(new String[permissionsList.size()]);//将List转为数组
            ActivityCompat.requestPermissions(MainActivity.this, permissions, PERMISSION_REQUEST);
        }
    }

    /**
     * 权限回调,
     * @param requestCode
     * @param permissions
     * @param grantResults
     */
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        switch (requestCode){
            case PERMISSION_REQUEST:
                //1609990641704.jpg,手机sdcard目录下的图片
                String fileNamePath = Environment.getExternalStorageDirectory().getAbsolutePath()+ File.separator;
                Log.e(TAG, "onCreate: filePath : "+fileNamePath );
                Bitmap bitmap = BitmapFactory.decodeFile( fileNamePath+"testone.jpg");
                ImageView viewById = findViewById(R.id.iv_test);
                viewById.setImageBitmap(bitmap);
                break;
            default:
                break;
        }
    }
  1. ImageView绘制图片
 //testone.jpg,手机sdcard目录下的图片
            String fileNamePath = Environment.getExternalStorageDirectory().getAbsolutePath()+ File.separator;
            Log.e(TAG, "onCreate: filePath : "+fileNamePath );
            Bitmap bitmap = BitmapFactory.decodeFile( fileNamePath+"testone.jpg");
            ImageView viewById = findViewById(R.id.iv_test);
            viewById.setImageBitmap(bitmap);

通过以上代码,在手机界面上就可以看到已经绘制的图片了。

  1. surfaceview绘制图片
 final SurfaceView viewById = findViewById(R.id.iv_test_sv);
        viewById.getHolder().addCallback(new SurfaceHolder.Callback() {
            @Override
            public void surfaceCreated(SurfaceHolder holder) {
                //surface创建
                if (holder == null){
                    return;
                }
                Paint paint  = new Paint();
                //设置是否使用抗锯齿功能,会消耗较大资源,导致绘制图形变慢
                paint.setAntiAlias(true);
                //设置图像是否抖动处理
                paint.setDither(true);
                //设置画笔样式
                paint.setStyle(Paint.Style.STROKE);

                String fileNamePath = Environment.getExternalStorageDirectory().getAbsolutePath()+ File.separator;
                Log.e(TAG, "onCreate: filePath : "+fileNamePath );
                Bitmap bitmap = BitmapFactory.decodeFile( fileNamePath+"testone.jpg");
                Canvas canvas = holder.lockCanvas();
                canvas.drawBitmap(bitmap,0,0,paint);
                holder.unlockCanvasAndPost(canvas);
            }

            @Override
            public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

            }

            @Override
            public void surfaceDestroyed(SurfaceHolder holder) {

            }
        });
  1. 自定义view绘制图片
public class ShowImageView extends View {

    private final Paint paint;
    private final Bitmap bitmap;

    public ShowImageView(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs,0);
    }

    public ShowImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        paint = new Paint();
        //设置是否使用抗锯齿功能,会消耗较大资源,导致绘制图形变慢
        paint.setAntiAlias(true);
        //设置图像是否抖动处理
        paint.setDither(true);
        //设置画笔样式
        paint.setStyle(Paint.Style.STROKE);

        String fileNamePath = Environment.getExternalStorageDirectory().getAbsolutePath()+ File.separator;
        bitmap = BitmapFactory.decodeFile( fileNamePath+"testone.jpg");
    }

    public ShowImageView(Context context) {
        this(context,null);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        if (bitmap != null){
            canvas.drawBitmap(bitmap,0,0,paint);
        }
    }
}

以上就是三种图片绘制的方式,让我们继续学习下一章节吧— 音视频开发二:Android平台PCM 数据的采集和播放

 



标签:String,bitmap,paint,android,音视频,绘制,public,fileNamePath
From: https://www.cnblogs.com/opensmarty/p/17127122.html

相关文章