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
提问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
- create an empty bitmap
- create a new Canvas object and pass this bitmap to it
- call view.draw(Canvas) passing it the canvas object you just created. Refer Documentation of method for details.
- Use Bitmap.compress() to write the contents of the bitmap to an OutputStream, file maybe.
- 创建一个空位图
- 创建一个新的 Canvas 对象并将这个位图传递给它
- 调用 view.draw(Canvas) 将您刚刚创建的画布对象传递给它。有关详细信息,请参阅方法文档。
- 使用 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
- set Drawing Cache Enabled
- Draw whatever you want
- Get Bitmap object from view
- Compress and save the image file
- 设置绘图缓存已启用
- 随心所欲地画
- 从视图中获取位图对象
- 压缩并保存图像文件
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();
}
}
}