ユーザーはアンドロイドギャラリーからバックエンドに画像をアップロードできます。アップロード前のビットマップサイズの扱い
確かに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上のプロファイルを想像してください。
誰かがこれを理解し、達成しようとしていることを理解できることを願っています。前もって感謝します!
です。この疑似コードを提供することはできませんでしたか?私はその方法だけではないと思うだろうか? – Knut
@Knutこのリンクを確認してください:http://developer.android.com/training/displaying-bitmaps/load-bitmap.html –