Вопрос

Я рисую 2D изображения на холсте.

Я хочу сохранить изображение, показанное на Canvas в файл JPEG, как я могу это сделать?

Это было полезно?

Решение

  1. Создать пустое растровое изображение
  2. Создайте новый объект Canvas и передайте это растровое изображение к нему
  3. Позвоните View.draw (Canvas), передавая его объект Canvas, который вы только что создали. Обратите документацию метода для деталей.
  4. Используйте Bitmap.compress (), чтобы написать содержимое растрового изображения до вывода, файл может быть.

Псевдо код:

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); 

Другие советы

  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);
        }

    }

}

Холст к 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();
        }
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top