画布上的图像到JPEG文件

d-m*_*man 25 android jpeg android-canvas

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

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

Sam*_*muh 26

  1. 创建一个空位图
  2. 创建一个新的Canvas对象并将此位图传递给它
  3. 调用view.draw(Canvas)将刚刚创建的canvas对象传递给它.有关详细信息,请参阅方法文档
  4. 使用Bitmap.compress()将位图的内容写入OutputStream,文件可能.

伪代码:

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); 
Run Code Online (Sandbox Code Playgroud)

  • 您好Samuh,我尝试了代码,它生成了一个jpeg文件但没有画布绘制的形状或者我在画布上写的东西.任何意见.谢谢,Ketan (12认同)

Aru*_*run 11

  1. 设置绘图缓存已启用
  2. 画任何你想要的东西
  3. 从视图中获取Bitmap对象
  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);
        }

    }

}
Run Code Online (Sandbox Code Playgroud)

  • 不知何故,在onDraw方法中压缩和保存是一个坏主意. (8认同)

Har*_*rry 6

画布到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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)