2010-02-01 40 views
23

Tôi đang vẽ hình ảnh 2D trên canvas.Ảnh trên canvas tới tệp JPEG

Tôi muốn lưu hình ảnh được hiển thị trên canvas vào tệp JPEG, tôi có thể làm như thế nào?

+0

Kể từ khi liên kết mà bạn gọi là dài kể từ khi chết bạn có thể có lẽ thêm bối cảnh nhiều hơn một chút vào câu hỏi chính nó? – Flexo

Trả lời

23
  1. tạo một bitmap trống
  2. tạo ra một đối tượng Canvas mới và vượt qua bitmap này để nó
  3. gọi view.draw (Canvas) đi qua nó là đối tượng canvas bạn vừa tạo. Refer Documentation of method for details.
  4. Sử dụng Bitmap.compress() để ghi nội dung của bitmap vào tệp OutputStream, có thể là tệp.

Pseudo mã:

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

Xin chào Samuh, Tôi đã thử mã, nó tạo ra tệp jpeg nhưng không có hình dạng được vẽ canvas hoặc những gì tôi từng viết trên canvas. Mọi nhận xét. Cảm ơn, Ketan –

+0

Cảm ơn bạn đã trả lời. –

12
  1. thiết Vẽ cache Enabled
  2. Draw bất cứ điều gì bạn muốn
  3. Nhận đối tượng Bitmap khỏi tầm nhìn
  4. Nén và lưu các tập tin hình ảnh

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

    } 

}
+7

Bằng cách nào đó nó cảm thấy như một ý tưởng tồi để nén và lưu trong phương thức onDraw. –

+0

nó mang lại cho tôi ngoại lệ con trỏ null – abh22ishek

6

Canvas để 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(); 
     } 
    } 
} 
Các vấn đề liên quan