Autore Topic: bitmap size exceeds VM  (Letto 777 volte)

Offline lelletta

  • Utente junior
  • **
  • Post: 68
  • Respect: 0
    • Mostra profilo
bitmap size exceeds VM
« il: 05 Gennaio 2013, 15:00:53 CET »
0
questo probleme si verifica solo nel device (tablet).
Dove posso migliorare il codice?
Questo codice si trova all'interno dell'adapter che popola una gridview. ogni elemento della gridview è un'immagine ridimensionata con sotto un checkbox.

Codice (Java): [Seleziona]
@Override
        public View getView(final int position, View view, ViewGroup group) {
               
                if (view == null) {
                        // Inflate the layout
                        holder = new ViewHolder();
                        LayoutInflater li = (LayoutInflater) context
                                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                        view = li.inflate(R.layout.grid_item, null);
                        holder.checkbox = (CheckBox) view
                                        .findViewById(R.id.grid_item_check);
                        holder.imageview = (ImageView) view
                                        .findViewById(R.id.grid_item_image);
                        view.setTag(holder);
                        if(idAvatar == 0 || !(tipo.equals(tipoAvatar))){
                                mSelectedPosition = -1;
                        }
                        else {
                                mSelectedPosition = recuperaPosizione(idAvatar, tipoAvatar);
                        }
                       
                 
                } else {
                        holder = (ViewHolder) view.getTag();

                }

                holder.checkbox.setId(position);
                holder.imageview.setId(position);
               
                cursor.moveToPosition(position);
                photoUri = Uri.parse(cursor.getString(1));

                InputStream photoStream;
                try {
                        photoStream = context.getContentResolver().openInputStream(photoUri);
                        bm = BitmapFactory.decodeStream(photoStream);
                } catch (FileNotFoundException e) {
                        e.printStackTrace();
                }

                Bitmap imgOriginale = new ImageUtility().getRoundedCornerBitmap(bm);
                Paint shadowPaint = new Paint();

                BlurMaskFilter blurFilter = new BlurMaskFilter(25,BlurMaskFilter.Blur.OUTER);
                shadowPaint.setMaskFilter(blurFilter);
                int[] offsetXY = new int[4];

                Bitmap shadowImage = imgOriginale.extractAlpha(shadowPaint, offsetXY);
                Bitmap shadowImage32 = shadowImage.copy(Bitmap.Config.ARGB_8888, true);
               
                Canvas cav = new Canvas(shadowImage32);
                cav.drawBitmap(imgOriginale, -offsetXY[0], -offsetXY[1], null);
       
                holder.imageview.setLayoutParams(new LinearLayout.LayoutParams(160, 160));
                holder.imageview.setScaleType(ImageView.ScaleType.FIT_XY);
                holder.imageview.setPadding(4, 4, 4, 4);
                holder.imageview.setImageBitmap(shadowImage32);
                holder.imageview.setOnClickListener(imageAction);
       
                holder.checkbox.setOnClickListener(new OnClickListener() {
                        @Override
                        public void onClick(View v) {
                                if (position != mSelectedPosition && mSelectedCB != null) {
                                        mSelectedCB.setChecked(false);
                                }
                                mSelectedPosition = position;
                                updateAvatar(mSelectedPosition, tipo);
                                mSelectedCB = (CheckBox) v;
                                notifyDataSetChanged();
                        }});
               
                if (mSelectedPosition != position) {
                        holder.checkbox.setChecked(false);
                } else {
                        holder.checkbox.setChecked(true);
                        if (mSelectedCB != null && holder.checkbox != mSelectedCB) {
                                mSelectedCB = holder.checkbox;
                        }
                }
               
                return view;
        }
       

Offline Vlad

  • Utente normale
  • ***
  • Post: 271
  • Respect: +16
    • Github
    • Google+
    • vmihalachi
    • vmihalachi
    • Mostra profilo
    • vmihalachi.com
  • Dispositivo Android:
    Samsung galaxy s2 | Samsung galaxy tab 7
  • Play Store ID:
    Vlad Mihalachi
  • Sistema operativo:
    Windows 8
Re:bitmap size exceeds VM
« Risposta #1 il: 05 Gennaio 2013, 16:55:15 CET »
+1
Immagino il tablet non sia di prima qualita :P segui questa guida magari risolvi Displaying Bitmaps Efficiently | Android Developers
« Ultima modifica: 05 Gennaio 2013, 17:21:35 CET da Vlad »

Offline lelletta

  • Utente junior
  • **
  • Post: 68
  • Respect: 0
    • Mostra profilo
Re:bitmap size exceeds VM
« Risposta #2 il: 06 Gennaio 2013, 11:09:40 CET »
0
esatto archos..mi serve per un lavoro di tesi. Grazie ma già avevo visto questa guida...cmq ho risolto ridimensionando le img appena caricate e poi su ciascuna di esse faccio l'edit.
Ora poichè le img caricate dal device hanno differenti grandezze se volessi ridimensionarle in modo che assumano la stessa forma si potrebbe fare?

Offline Vlad

  • Utente normale
  • ***
  • Post: 271
  • Respect: +16
    • Github
    • Google+
    • vmihalachi
    • vmihalachi
    • Mostra profilo
    • vmihalachi.com
  • Dispositivo Android:
    Samsung galaxy s2 | Samsung galaxy tab 7
  • Play Store ID:
    Vlad Mihalachi
  • Sistema operativo:
    Windows 8
R: bitmap size exceeds VM
« Risposta #3 il: 06 Gennaio 2013, 15:12:15 CET »
0
Per forma intendi il formato tipo il 16:9 ?

Offline lelletta

  • Utente junior
  • **
  • Post: 68
  • Respect: 0
    • Mostra profilo
Re:bitmap size exceeds VM
« Risposta #4 il: 06 Gennaio 2013, 15:53:52 CET »
0
no. Immagini ridotte della stessa dimensione. :-)