2014-07-17 5 views
1

그래서이 이상한 문제가 있습니다. 9/10 배는 완벽하게 작동하지만 10 %는 전혀 작동하지 않습니다.Android 이미지 뷰 비트 맵 저장

단순히 확대/축소 할 수있는 ImageView가 있습니다. 그 위대한 작품 - 그럼 나는 전화 자체에 imageView 저장하려고합니다. 이것은 대부분의 경우 작동하지만, 때로는 이미지를 검은 색 화면으로 저장합니다 ... 실제로 ImageView에 표시되는 것이 아닙니다.

다음은 이미지 뷰를 저장하는 내 코드입니다 :

protected void saveZoomedImage(){ 

    //create ImageView Bitmap 
    RelativeLayout tableContent; 
    tableContent=(RelativeLayout)findViewById(R.id.imgHolder); 
    tableContent.measure(MeasureSpec.makeMeasureSpec(tableContent.getLayoutParams().width, MeasureSpec.EXACTLY), 
      MeasureSpec.makeMeasureSpec(tableContent.getLayoutParams().height,MeasureSpec.EXACTLY)); 
    tableContent.setDrawingCacheEnabled(true); 
    final Bitmap screenshot = Bitmap.createBitmap(tableContent.getDrawingCache()); 
    tableContent.setDrawingCacheEnabled(true); 

    //save file 
    File folder = new File(Environment.getExternalStorageDirectory() + "/thedir"); 
    if(!folder.exists()){ 
     folder.mkdir(); 
    } 
    String exsistingFileName=Environment.getExternalStorageDirectory().getAbsolutePath() + "/thedir"; 
    FileOutputStream fos = null; 
    try {   
     fos = new FileOutputStream(exsistingFileName + "/image.jpg"); 
     screenshot.compress(Bitmap.CompressFormat.JPEG, 90, fos); 
     fos.flush(); 
     fos.close(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 

이 파일의 벌금을 절약 할 수 있지만,이 시대의 작은 % 시대에 어떤 이유로 이미지를 캡처하지 않습니다처럼 그냥 보인다.

장치 설정을

이동> 장치> 응용 프로그램> 응용 프로그램 관리자>의 "응용 프로그램"> 권한> :

public static String saveImageInExternalCacheDir(Context context, Bitmap bitmap, String myfileName) { 
    String fileName = myfileName.replace(' ', '_') + getCurrentDate().toString().replace(' ', '_').replace(":", "_"); 
    String filePath = (context.getExternalCacheDir()).toString() + "/" + fileName + ".jpg"; 
    try { 
     FileOutputStream fos = new FileOutputStream(new File(filePath)); 
     bitmap.compress(Bitmap.CompressFormat.JPEG, 85, fos); 
     fos.flush(); 
     fos.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return filePath; 
} 
+0

'tableContent.setDrawingCacheEnabled (true); '를 두 번 호출합니다. 두 번째로 거짓이라고 했니? – CodeMonkey

+0

ah yes lol- 그게 문제를 일으킬 수 있다고 생각하세요? – user3267847

+0

잘 모르겠습니다. 가능하다고 생각합니다. 그것은 나에게 돋보이는 유일한 것입니다. 10 번째 오류 메시지가 나타나면 게시물을 편집하여 추가하면 도움이됩니다. – CodeMonkey

답변

0

이 코드를 사용해보십시오 저장소 권한을 사용하십시오! 매니페스트

권한 :

String myDate = getCurrentDateAndTime(); 
FileOutputStream outStream = null; 
File sdCard = Environment.getExternalStorageDirectory(); 
File dir = new File(sdCard.getAbsolutePath() + "/YourFolderName"); 
dir.mkdirs(); 
String fileName = "YourFileName_"+myDate+".jpg"; 
File outFile = new File(dir, fileName); 
outStream = new FileOutputStream(outFile); 
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outStream); 
outStream.flush(); 
outStream.close(); 
//to refresh the gallery 
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); 
intent.setData(Uri.fromFile(file)); 
sendBroadcast(intent); 

}

도우미 기능 : 당신이 당신의 파일 저장에 자신의 디렉토리를 만들려면

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

그래서, 당신은 같은 somethibng 사용할 수 있습니다 :

private String getCurrentDateAndTime() { 
Calendar c = Calendar.getInstance(); 
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss"); 
String formattedDate = df.format(c.getTime()); 
return formattedDate; 

희망이 도움이됩니다!

1

먼저 앱이 활성화 저장 권한이 있는지 확인하십시오

+1

답을 좀 더 자세히 설명해 주시겠습니까 –

+0

내 답변을 수정했습니다! 행운을 빕니다! –

+0

야, 나는 의견을 내기 전에 투표를 포기했다. 우리는 서로 도우려고 노력하고 있습니다. 그게 전부예요 –