2014-06-10 2 views
1

캔버스를 이미지로 변환하여 기기에 저장하고 싶습니다. 하지만 비트 맵을 캔버스로 설정하면 오류 java.lang.UnsupportedOperationException가 발생합니다. 내 전체 코드 :Android setBitmap to canvas

public class SingleTouchEventView extends View { 
private Paint paint = new Paint(); 
private Path path = new Path(); 


public SingleTouchEventView(Context context, AttributeSet attrs) { 
    super(context, attrs); 

    paint.setAntiAlias(true); 
    paint.setStrokeWidth(6f); 
    paint.setColor(Color.WHITE); 
    paint.setStyle(Paint.Style.STROKE); 
    paint.setStrokeJoin(Paint.Join.BEVEL); 
} 

@Override 
protected void onDraw(Canvas canvas) { 
    canvas.drawPath(path, paint); 
    canvas.drawCircle(50, 50, 3, paint); 
    Bitmap bitmap = Bitmap.createBitmap(canvas.getWidth(), canvas.getHeight(), Bitmap.Config.ARGB_8888); 
    canvas.setBitmap(bitmap); 
    try { 

     File file = new File(Environment.getExternalStorageDirectory() + "/image.jpg"); 
     bitmap.compress(Bitmap.CompressFormat.JPEG, 100, new FileOutputStream(file)); 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

}

어쩌면 누군가가 나를 도울 수있는이 문제를 해결하기 위해?

답변

5

비트 맵을 그리는 방법이 아닙니다. 화면에 그려지는 캔버스는 사용하지 마십시오. 두 번째 캔버스를 만들고 생성자의 매개 변수로 그릴 비트 맵을 전달합니다. 그런 다음 해당 캔버스에 대한 모든 그리기 명령이 비트 맵을 그립니다. 그런 다음 비트 맵을 화면에 그립니다. 이런 식으로 뭔가 :

Canvas myCanvas = new Canvas(myBitmap); 
myCanvas.drawLine(); 
myCanvas.drawCircle(); 
//Insert all the rest of the drawing commands here 
screenCanvas.drawBitmap(myBitmap, 0, 0); 

가 나는 또한 된 onDraw에서 파일 시스템에 기록 않을 것이다 - 당신이 할 경우 도면 성능이 심하게 고통을 기대. 별도의 함수 호출로이를 수행 할 수 있습니다. 변수에 myBitmap을 저장하면 언제든지 압축하여 마지막 그리기를 디스크에 쓸 수 있습니다.