-1

私のアプリケーションでは、AsyncTask を使用してサーバーから画像をダウンロードしています。base64 をビットマップに変換すると、例外が発生します。ネットで検索しましたが、問題を解決できませんでした。助けてください。コードは次のとおりです。

try{
        JSONArray jArray = new JSONArray(result_resp);
        for(int i=0;i<jArray.length();i++) {
            JSONObject jobject = jArray.getJSONObject(i);
                String originalitemid = jobject.getString("OriginItemId");
                String resType = jobject.getString("ItemType");
                String response = jobject.getString("ResImage");
                String resid = jobject.getString("ResId");
                 byte[] decodedByte = null;
                    try {
                        decodedByte = Base64.decode(response, 0);
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    Bitmap bm = BitmapFactory.decodeByteArray(decodedByte, 0, decodedByte.length); 
                    System.out.println("the bitmap value is:"+bm);
                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
                    bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
                    byte[] data = baos.toByteArray();

                    try {
                        baos.close();
                        baos=null;
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }

                    CommentUDB helper = new CommentUDB(this);
                    SQLiteDatabase db = helper.getWritableDatabase();


                    Cursor cur = db.rawQuery("select * from ResponseTable1 where ResId = ?", new String[]{resid});
                    if(cur.getCount()>0){

                    }else {

                    ContentValues cValueImg = new ContentValues();
                    cValueImg.put("ResId", resid);
                    cValueImg.put("ResType",resType);
                    cValueImg.put("Response",data);
                    cValueImg.put("OriginalItemId",originalitemid);
                    db.insert("ResponseTable1", null, cValueImg);

                    System.out.println("the database is called");
                    db.close();
                    helper.close();






                    }

            }

        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


07-30 16:08:41.680: E/AndroidRuntime(11738): FATAL EXCEPTION: Thread-12083
07-30 16:08:41.680:
 E/AndroidRuntime(11738): java.lang.OutOfMemoryError
07-30 16:08:41.680: E/AndroidRuntime(11738):    
at android.graphics.BitmapFactory.nativeDecodeByteArray(Native Method)
07-30 16:08:41.680: E/AndroidRuntime(11738): 
at android.graphics.BitmapFactory.decodeByteArray(BitmapFactory.java:518)

07-30 16:08:41.680: E/AndroidRuntime(11738):    
at android.graphics.BitmapFactory.decodeByteArray(BitmapFactory.java:536)

07-30 16:08:41.680: E/AndroidRuntime(11738):    
at com.inventit.commentu.getInformationService.insertResponseTable(getInformationService.java:258)

07-30 16:08:41.680: E/AndroidRuntime(11738):    
at com.inventit.commentu.getInformationService$Worker.run(getInformationService.java:130)
07-30
 16:08:41.740: I/Adreno200-EGLSUB(11738): <ConfigWindowMatch:2087>: Format RGBA_8888.

事前に感謝します。

4

2 に答える 2

0

これを試して画像のサイズを拡大縮小する必要があります

public static Bitmap loadResizedBitmap( String filename, int width, int height, boolean exact ) {
    Bitmap bitmap = null;
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeFile( filename, options );
    if ( options.outHeight > 0 && options.outWidth > 0 ) {
        options.inJustDecodeBounds = false;
        options.inSampleSize = 2;
        while (    options.outWidth  / options.inSampleSize > width
                && options.outHeight / options.inSampleSize > height ) {
            options.inSampleSize++;
        }
        options.inSampleSize--;

        bitmap = BitmapFactory.decodeFile( filename, options );
        if ( bitmap != null && exact ) {
            bitmap = Bitmap.createScaledBitmap( bitmap, width, height, false );
        }
    }
    return bitmap;
}

画像のサイズ変更の詳細については、Android デベロッパー ヘルプをご覧ください。

于 2013-07-30T11:08:18.620 に答える
0

これを使用できます..適切な方法と解決策を取得してください。

public Bitmap getResizedBitmap(Bitmap bm, int newHeight, int newWidth) {
   int width = bm.getWidth();
   int height = bm.getHeight();
   float scaleWidth = ((float) newWidth) / width;
   float scaleHeight = ((float) newHeight) / height;
// CREATE A MATRIX FOR THE MANIPULATION
   Matrix matrix = new Matrix();
// RESIZE THE BIT MAP
   matrix.postScale(scaleWidth, scaleHeight);

// "RECREATE" THE NEW BITMAP
   Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0, width, height,
        matrix, false);
   return resizedBitmap;}
于 2013-07-30T10:58:52.520 に答える