Размер растрового изображения java.lang.outofmemoryerror превышает бюджет виртуальной машины на растровом изображении - PullRequest
2 голосов
/ 13 сентября 2011

В моем приложении я показываю изображения с камбуза, и при выборе изображения я хочу загрузить это изображение на веб-сервер. Для загрузки изображения на сервер я использую следующий код, но получаю ошибку при bitmapImage = BitmapFactory.decodeFile (путь, опция);

private void uploadImage(String selectedImagePath) {
        String str = null;
        byte[] data = null;
        String  Responce= null;
        Bitmap bitmap2 = null;
        try {
            File file=new File(selectedImagePath);
            //FileInputStream fileInputStream = new FileInputStream(new File(imagePath2) );
            FileInputStream fileInputStream=new FileInputStream(selectedImagePath);
            Log.i("Image path 2",""+selectedImagePath+"\n"+fileInputStream);
            name=file.getName();
            name=name.replace(".jpg","");
            name=name.concat(sDate).concat(".jpg");
            Log.e("debug",""+name);

            //else
            //{
            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inTempStorage = new byte[16*1024];

            //bitmapImage = BitmapFactory.decodeFile(path,opt);

            bitmap2=BitmapFactory.decodeFileDescriptor(fd, outPadding, opts)
            Log.i("Bitmap",""+bitmap.toString());
            BitmapFactory.decodeStream(fileInputStream);
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            bitmap2.compress(Bitmap.CompressFormat.PNG, 100, baos);
            data = baos.toByteArray();
            str=Base64.encodeBytes(data);
            //}

            //String image=str.concat(sDate);
            ArrayList<NameValuePair> nameValuePairs = new
            ArrayList<NameValuePair>();
            nameValuePairs.add(new BasicNameValuePair("image",str));
            nameValuePairs.add(new BasicNameValuePair("imagename", name));
            Log.e("debug",""+nameValuePairs.toString());

            HttpClient client=new DefaultHttpClient();
            HttpPost post=new HttpPost("http://ufindfish.b4live.com/uploadTipImage.php");

            post.setEntity(new UrlEncodedFormEntity(nameValuePairs));

            HttpResponse httpResponse=client.execute(post);
            HttpEntity entity=httpResponse.getEntity();
            InputStream inputStream=entity.getContent();

            StringBuffer builder=new StringBuffer();
            int ch;
            while( ( ch = inputStream.read() ) != -1 )
            {
                builder.append((char)ch);
            }
            String s=builder.toString();
            Log.i("Response",""+s);



        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        if(bitmap2!=null)
        {
            bitmap2.recycle();
        }

Ответы [ 2 ]

15 голосов
/ 13 сентября 2011

Ошибка связана с размером изображения, я использовал этот код, чтобы уменьшить размер изображения при выборе из галереи.

public Bitmap setImageToImageView(String filePath) 
    { 
    // Decode image size 
    BitmapFactory.Options o = new BitmapFactory.Options(); 
    o.inJustDecodeBounds = true; 
    BitmapFactory.decodeFile(filePath, o); 

    // The new size we want to scale to 
    final int REQUIRED_SIZE = 1024; 

    // Find the correct scale value. It should be the power of 2. 
    int width_tmp = o.outWidth, height_tmp = o.outHeight; 
    int scale = 1; 
    while (true) 
    { 
    if (width_tmp < REQUIRED_SIZE && height_tmp < REQUIRED_SIZE) 
    break; 
    width_tmp /= 2; 
    height_tmp /= 2; 
    scale *= 2; 
    } 

    // Decode with inSampleSize 
    BitmapFactory.Options o2 = new BitmapFactory.Options(); 
    o2.inSampleSize = scale; 
    Bitmap bitmap = BitmapFactory.decodeFile(filePath, o2); 
    return bitmap;

    }

Надеюсь, это может вам помочь.

0 голосов
/ 13 сентября 2011

При загрузке изображения вам нужно прорваться к образцам, там уже есть вопрос и хороший ответ, посмотрите на эту страницу, это может вам помочь.

Страннопроблемы с памятью при загрузке изображения в растровый объект

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...