답변
- 는
- 새로운 캔버스 객체를 생성하고 당신이 방금 만든 캔버스 객체를 전달 그것을
- 전화 view.draw (캔버스)이 비트 맵을 통과 빈 비트 맵을 만들 수 있습니다. Refer Documentation of method for details.
- 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);
안녕 Samuh, jpeg 파일을 생성하지만 캔버스 그려진 모양이 없거나 캔버스에 작성한 내용이 없습니다. 모든 의견. 감사합니다, 답변을 케탄 –
감사합니다. –
- 설정 그리기 캐시는
- 보기
- 압축에서 비트 맵 오브젝트를 취득하고 이미지 파일을 저장 원하는
- 그리기를 사용 JPG210
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);
}
}
}
어쨌든 onDraw 메서드 내에서 압축하고 저장하는 것은 좋지 않은 생각입니다. –
그것은 나에게 널 포인터 예외를 준다. – abh22ishek
캔버스 :
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();
}
}
}
당신이 언급 된 링크는 아마 질문 자체에 좀 더 컨텍스트를 추가 할 수 있습니다 긴 죽은 이후이기 때문에? – Flexo