2015-07-11 64 views
0

我有一个onclick,这将允许用户从图库中选择像这样一个文件:安卓:保存从库图像,然后加载到ImageView的

case R.id.ColourCustom: 
       customBorderChange(); 
       break; 

private void customBorderChange() { 
    final ImageView QPBackground = (ImageView) findViewById(R.id.QPBackground); 
    menuHandler.removeCallbacks(menuTimer); 
    menuHandler.postDelayed(menuTimer, 5000); 
    bgHandler.removeCallbacks(runnableBG); 
    bgHandler.postDelayed(runnableBG, 2000); 
    Intent i = new Intent(Intent.ACTION_PICK, 
      android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
    startActivityForResult(i, GALLERY_REQUEST); 
    File file = getFileStreamPath("QuickPlayBG.png"); 
    if (file.exists()) { 
     QPBackground.setImageBitmap(getThumbnail("QuickPlayBG.png")); 
    } else { 
     String uri21 = "@drawable/bg_green"; 
     int imageResource21 = getResources().getIdentifier(uri21, null, getPackageName()); 
     QPBackground.setBackgroundResource(imageResource21); 
    } 
} 

这在这里向您发送:

protected void onActivityResult (int requestCode, int resultCode, Intent data) 
{ 
    Uri selectedImageUri; 
    if (requestCode == GALLERY_REQUEST && resultCode == RESULT_OK && null != 
      data) { 
     selectedImageUri = data.getData(); 
     String[] filePathColumn = { MediaStore.Images.Media.DATA }; 

     Cursor cursor = getContentResolver().query(selectedImageUri, 
       filePathColumn, null, null, null); 
     cursor.moveToFirst(); 

     cursor.close(); 
    } 
    try { 
     Bundle extras = data.getExtras(); 
     Bitmap photo = extras.getParcelable("data"); 
     saveBGFile(photo); 
    } catch (Exception e) { 
     String errorMessage = "Make your mind up mate!"; 
     Toast toast = Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT); 
     toast.show(); 
    } 
    try { 
     saveQPConfig(); 
    } catch (IOException e) { 
     String errorMessage = "Saving failed"; 
     Toast toast = Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT); 
     toast.show(); 
    } 
} 

节省了文件,使用saveBGFile:

public void saveBGFile(Bitmap image) { 
    FileOutputStream out = null; 
    String filename = "QuickPlayBG.png"; 
    try { 
     out = new FileOutputStream(filename); 
     image.compress(Bitmap.CompressFormat.PNG, 100, out); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 
     try { 
      if (out != null) { 
       out.close(); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

的问题是,只有这一行:

QPBackground.setImageBitmap(getThumbnail("QuickPlayBG.png")); 

它不加载任何东西。如果我将“QuickPlayBG.png”更改为我在另一部分应用中使用的另一个文件名,则加载正常。这两个文件都是使用相同的方法创建的。我证实存在“QuickPlayBG.png”。

编译器给了我下面的提示:

E/﹕ ReadStreamToBuffer : Qmage Stream read error!! required length 12 bytes, but red 0 bytes 
E/﹕ isQmage : input SkStreamRewindable length is less than Qmage minimum size : 0 

我认为这与我保存图像的方式做,但我看不到自己的过错。可能是什么问题,它不是加载图像?

编辑:

这里是getThumbnail方法我使用(适用于另一个文件名):

public Bitmap getThumbnail(String filename) { 
    final Context context = this; 
    String fullPath = Environment.getExternalStorageDirectory().getAbsolutePath(); 
    Bitmap thumbnail = null; 

    if (thumbnail == null) { 
     try { 
      File filePath = context.getFileStreamPath(filename); 
      FileInputStream fi = new FileInputStream(filePath); 
      thumbnail = BitmapFactory.decodeStream(fi); 
     } catch (Exception ex) { 
      Log.e("getThumbnail() !exist", ex.getMessage()); 
     } 
    } 
    return thumbnail; 
} 

回答

0

使用这个这个简短而亲切的代码。使用图库的意图。

1.declaire变量。

private static int RESULT_IMG = 1; 
String imgString; 

2.在onclick按钮上调用图库的意图。

Intent galleryIntent = new Intent(Intent.ACTION_PICK, 
       android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
startActivityForResult(galleryIntent, RESULT_LOAD_IMG); 

3.onActivityResult to your code。

@Override 
protected void onActivityResult(int requestCode, int responseCode, Intent data) { 
super.onActivityResult(requestCode, responseCode, data); 
try { 
    if (requestCode == RESULT_IMG && responseCode == RESULT_OK 
        && null != data) { 
    Uri pickedImage = data.getData(); 
    String[] filePathColumn = { MediaStore.Images.Media.DATA }; 
    Cursor cursor = getContentResolver().query(pickedImage, 
      filePathColumn, null, null, null); 
    cursor.moveToFirst(); 
    int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
    imgString = cursor.getString(columnIndex); 
    cursor.close(); 

    //set bitmap to your imageview 
    ImageView imgView = (ImageView) findViewById(R.id.imgView); 
    imgView.setImageBitmap(BitmapFactory.decodeFile(imgString)); 
} else { 
    Toast.makeText(this, "please select picture",Toast.LENGTH_LONG).show(); 
} 
} catch (Exception e) { 
    Toast.makeText(this, "error message", Toast.LENGTH_LONG) 
        .show(); 
    } 
}