Android 画布上的图像到 JPEG 文件

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/2174875/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-20 04:49:40  来源:igfitidea点击:

Image on canvas to JPEG file

androidjpegandroid-canvas

提问by d-man

I'm drawing 2D images on the canvas.

我正在画布上绘制 2D 图像。

I want to save image shown on canvas to JPEG file, how can I do it?

我想将画布上显示的图像保存为 JPEG 文件,我该怎么做?

回答by Samuh

  1. create an empty bitmap
  2. create a new Canvas object and pass this bitmap to it
  3. call view.draw(Canvas) passing it the canvas object you just created. Refer Documentation of method for details.
  4. Use Bitmap.compress() to write the contents of the bitmap to an OutputStream, file maybe.
  1. 创建一个空位图
  2. 创建一个新的 Canvas 对象并将这个位图传递给它
  3. 调用 view.draw(Canvas) 将您刚刚创建的画布对象传递给它。有关详细信息,请参阅方法文档。
  4. 使用 Bitmap.compress() 将位图的内容写入 OutputStream,可能是文件。

Pseudo code:

伪代码:

Bitmap  bitmap = Bitmap.createBitmap( view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
view.draw(canvas); 
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos); 

回答by Arun

  1. set Drawing Cache Enabled
  2. Draw whatever you want
  3. Get Bitmap object from view
  4. Compress and save the image file
  1. 设置绘图缓存已启用
  2. 随心所欲地画
  3. 从视图中获取位图对象
  4. 压缩并保存图像文件

import java.io.File;
import java.io.FileOutputStream;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.util.Log;
import android.view.View;

public class CanvasTest extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Draw2d d = new Draw2d(this);
        setContentView(d);
    }

    public class Draw2d extends View {

        public Draw2d(Context context) {
            super(context);
            setDrawingCacheEnabled(true);
        }

        @Override
        protected void onDraw(Canvas c) {
            Paint paint = new Paint();
            paint.setColor(Color.RED);          
            c.drawCircle(50, 50, 30, paint);

            try {
                getDrawingCache().compress(Bitmap.CompressFormat.JPEG, 100, new FileOutputStream(new File("/mnt/sdcard/arun.jpg")));
            } catch (Exception e) {
                Log.e("Error--------->", e.toString());
            }
            super.onDraw(c);
        }

    }

}

回答by Harry

Canvas to JPG:

画布转JPG:

Canvas canvas = null;
FileOutputStream fos = null;
Bitmap bmpBase = null;

bmpBase = Bitmap.createBitmap(image_width, image_height, Bitmap.Config.ARGB_8888);
canvas = new Canvas(bmpBase);
// draw what ever you want canvas.draw...

// Save Bitmap to File
try
{
    fos = new FileOutputStream(your_path);
    bmpBase.compress(Bitmap.CompressFormat.PNG, 100, fos);

    fos.flush();
    fos.close();
    fos = null;
}
catch (IOException e)
{
    e.printStackTrace();
}
finally
{
    if (fos != null)
    {
        try
        {
            fos.close();
            fos = null;
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}