如何将图像保存到文件 android 自定义视图?

how to save image to file android custom view?

我有一个问题。

我尝试将 canvas 图像保存到文件

这是我的工作方式。 1.Create canvas 带位图的对象(表格图像) 2.print canvas 上的文本(使用 drawText) 3.save 使用 bitmap.compress() 方法

但它只保存了原始位图(没有文本)

我想知道如何将文本打印位图保存到文件中? 这是我的代码

protected class MyView extends View{

    public MyView(Context context){
        super(context);
    }

    public void onDraw(Canvas canvas){
        Paint pnt = new Paint();
        pnt.setColor(Color.BLACK);
        canvas.scale(0.5f,0.5f);
        Resources res = getResources();
        BitmapDrawable bd =(BitmapDrawable)res.getDrawable(R.drawable.hanhwa);
        Bitmap bit = bd.getBitmap();
        canvas.drawBitmap(bit,0,0,null);

        pnt.setTextSize(30);
        canvas.drawText("hello",290,340,pnt);
        canvas.restore();


        //file save//
        File folder = new File(Environment.getExternalStorageDirectory()+"/DCIM/tmp");

        boolean isExist = true;
        if(!folder.exists()){
            isExist = folder.mkdir();
        }
        if(isExist){
            File file = null;
            boolean isFileExist = false ;
            file = new File(folder.getPath() + "/tmp.jpg");

            if(file != null && !file.exists()){
                try{
                    isFileExist = file.createNewFile();
                } catch(IOException e){
                    e.printStackTrace();
                }
            }
            else{
            }

            if(file.exists()){
                FileOutputStream fos = null;
                try{
                    fos = new FileOutputStream(file);

                    bit.compress(Bitmap.CompressFormat.JPEG,100,fos);
                }
                catch(Exception e){
                    e.printStackTrace();
                }
                finally{
                    try{
                        fos.close();
                    }
                    catch(IOException e){
                        e.printStackTrace();
                    }
                }

            }
        }
        else{
            //Toast.makeText(MyView.this,"foler not exist.",Toast.LENGTH_LONG).show();
        }
    }
}
Bitmap.compresss()

此方法将位图的压缩版本写入指定的输出流。

将位图实例传递给 canvas

这是伪代码。 (除了其他语句,例如 try-catch,语句)

  1. Canvas c = new Canvas(位);
  2. c.drawText("hello",290,340,pnt);
  3. b.compress(Bitmap.CompressFormat.JPEG, 100, fos);

this post 也会有帮助。