2016-04-06 7 views
0

ユーザーはアンドロイドギャラリーからバックエンドに画像をアップロードできます。アップロード前のビットマップサイズの扱い

確かにOutOfMemoryフォールトを生成する膨大なイメージを選ぶのが問題です。私がBitmapでやりたいことは、OOMエラーが発生しないことを確認することです。だからそれが大きすぎるかどうかだけを確認してください。サイズが小さくても縦横比を保つならば、写真の一部を切り取る必要はありません。 イメージをバックエンドからダウンロードすると、ピカソを通過し、.centerCrop()および.fit()を使用してイメージビューにクロップされます。

まず、ここではギャラリーからデータを受信するアクティビティがあります:次の

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode,resultCode,data); 
    if(resultCode == RESULT_OK){ 
     if(requestCode == SELECT_PICTURE){ 

      Uri selectedImage = data.getData(); 

      if(!image1_exists){ 
       attachImage(image1,selectedImage); 
      } 

     } 

    } 
} 

、私が選びだし画像を撮影し、「ギャラリー」レイアウトで表示:

public void attachImage(ImageView image, Uri uri){ 

    Picasso.with(this).load(uri).resize(500,500).into(mTarget); 

    Picasso.with(this).load(uri).centerCrop().fit().into(image); 

} 

だから、1つのピカソインスタンスがあります選択した画像を表示し、もう1つはURIデータのサイズを大きくする必要があります(これは完全に変更する必要があります)。

final Target mTarget = new Target() { 
    @Override 
    public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom loadedFrom) { 

     image_scaled = Bitmap.createScaledBitmap(bitmap, 500,500 * bitmap.getHeight()/bitmap.getWidth(), false); 
     if(!image1_exists){ 
      uploadImage(image_scaled,"image1"); 
     } 

    } 
    @Override 
    public void onBitmapFailed(Drawable drawable) { 
     Log.d("DEBUG", "onBitmapFailed"); 
    } 

    @Override 
    public void onPrepareLoad(Drawable drawable) { 
     Log.d("DEBUG", "onPrepareLoad"); 
    } 
}; 

ここで私は(あなたが見ることができるように)ビットマップを縮小してバックエンドのストレージスペースを節約したいと思います。しかし、画像の一部を切り取ることなく、アスペクト比を維持します。とにかく大きな画像に似た何かをしなければならないので、これは私が想像するには不必要かもしれません。 これらのイメージのレイアウトがどのように見えるかを知る必要がある場合、すべてのイメージが正方形のイメージビューに収まるInstagram上のプロファイルを想像してください。

誰かがこれを理解し、達成しようとしていることを理解できることを願っています。前もって感謝します!

答えて

1

thisビットマップデコードオプションを使用してこれを行っています。これを使用してビットマップをデコードすると、ビットマップがダウンサンプリングされ、デバイス上で占有されるメモリが少なくなります。残念ながら、ビットマップをデコードするときにしか適用できないため、Picassoターゲットでは機能しませんが、ピカソターゲットなしでは管理できます。

+0

です。この疑似コードを提供することはできませんでしたか?私はその方法だけではないと思うだろうか? – Knut

+0

@Knutこのリンクを確認してください:http://developer.android.com/training/displaying-bitmaps/load-bitmap.html –

関連する問題