2014-12-09 9 views
1

내 안드로이드 애플 리케이션에서 나는 캔버스가 있고 사용자가 캔버스를 그릴 수있는 표면 뷰를 가지고 있습니다. 이제 캔버스 이미지를 캡처하고 SD 카드에 저장하고 싶습니다. 다음은 내 코드입니다 -표면보기의 스크린 샷이 안드로이드에서 작동하지 않습니다

Bitmap bitmap = Bitmap.createBitmap(maxX, maxY, Bitmap.Config.RGB_565); 
canvas.setBitmap(bitmap); 
String mFile = path+"/drawing.png"; 
     Bitmap bitmap = drawBitmap(); 
     File file = new File(mFile); 
     FileOutputStream fos = new FileOutputStream(file); 
     bitmap.compress(CompressFormat.PNG, 100, fos); 
     fos.flush(); 
     fos.close(); 

코드가 실행하지만 난 이름을 가진 이미지 경로 파일을 SD 카드를 열 때 생성하지만이 검은 색 때 열려있는 이미지입니다. 안드로이드에 캔버스에서 이미지를 캡처하는 방법.

+0

중복 된 http://stackoverflow.com/questions/25086263/take-screenshot-of-surfaceview/? – fadden

답변

-1

스냅 샷을 저장하려는 표면보기 개체와 파일 경로를 전달하기 만하면됩니다. 그것은 완벽하게 작동합니다.

public static void takeScreenshot(View view, String filePath) { 
      Bitmap bitmap = getBitmapScreenshot(view); 

      File imageFile = new File(filePath); 
      imageFile.getParentFile().mkdirs(); 
      try { 
       OutputStream fout = new FileOutputStream(imageFile); 
       bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fout); 
       fout.flush(); 
       fout.close(); 
      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 

public static Bitmap getBitmapScreenshot(View view) { 
     view.measure(MeasureSpec.makeMeasureSpec(view.getWidth(), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(view.getHeight(), MeasureSpec.EXACTLY)); 
     view.layout((int)view.getX(), (int)view.getY(), (int)view.getX() + view.getMeasuredWidth(), (int)view.getY() + view.getMeasuredHeight()); 

     view.setDrawingCacheEnabled(true); 
     view.buildDrawingCache(true); 
     Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache()); 
     view.setDrawingCacheEnabled(false); 

     return bitmap; 
    } 
+0

그래서 getBitmapScreenshot (view); ? – Ravi

+0

미안하지만, 나는 두 번째 기능을 추가하는 것을 잊어 버린다. 지금 확인하십시오. 그것은 당신의 문제를 해결할 수 있기를 바랍니다. –

+0

takeScreenshot (View view, String filePath) 매개 변수 뷰가 필요하므로 어떻게 표면 뷰를 전달할 수 있습니까? – Ravi