formaat wijzigen afbeeldingen in galerij voor beeldverwerking app. android

ik heb een app voor beeldverwerking. Als ik een foto maak met het deel van de app dat de afbeelding vangt, wordt de afbeelding uiteindelijk correct weergegeven op het scherm. Dit komt omdat ik camera-params heb opgegeven met behulp van de schermgrootte van de hardware. als ik probeer een afbeelding te laden die is genomen van de camera van de telefoon (niet de camera van de app), dan is de afbeelding te groot op het scherm en soms te groot vanuit een bytestandpunt. hoe kan ik de afbeeldingen in de galerij verkleinen of comprimeren zodat mijn app ze kan gebruiken? bedankt

public class DisplayUndistortedBitmapFromGalleryActivity extends Activity {

    private static final String TAG = "*********DUBFGActivity";
    private Context mContext = this;
    Uri uri;
    private Bitmap mbitmap = null;

    @Override 
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);


         uri = getIntent().getData();
        if(uri != null){
            Log.e(TAG, "uri ok");
        }else {
            Log.e(TAG, "uri not ok");
        }


        try {
              mbitmap = Media.getBitmap(getContentResolver(), uri);
             //setMbitmap(bitmap);
        } catch (FileNotFoundException e) {
           //TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
           //TODO Auto-generated catch block
            e.printStackTrace();
        }

        if(mbitmap == null){
            Log.e(TAG,"mbitmap is null");
        }else{
            Log.e(TAG,"mbitmap is not null");
        }

.

public class DisplayUndistortedBitmapFromGallery extends View{





    public DisplayUndistortedBitmapFromGallery(Context context) {
        super(context);

    }





    public DisplayUndistortedBitmapFromGallery(Context context, AttributeSet attr) {
        super(context,attr);
        Log.e(TAG, "++++++++++ inside dubfgview constructor");





       Bitmap bm = ((DisplayUndistortedBitmapFromGalleryActivity)getContext()).getMbitmap();

        if(bm == null){
            Log.e(TAG, "bm = null");
        }else{
            Log.e(TAG, "bm =  not null");
        }


        bgr = bm.copy(bm.getConfig(), true);
0

1 antwoord

Als ik uw vraag goed begrijp, zijn er twee problemen. De eerste is dat de ImageView de afbeelding niet schaalt om op het scherm te passen en de tweede is dat de bitmaps te veel RAM vereisen.

Om het eerste probleem op te lossen, vertelt u eenvoudigweg aan de afbeeldingsweergave hoe u de afbeelding wilt schalen. Doe gewoon het volgende:

imgView.setScaleType(ImageView.ScaleType.INSERT_SCALE_TYPE);

Here is a list of the different scale types.

Als dit het probleem niet oplost, zorg er dan voor dat de grenzen van uw ImageView niet te groot zijn. Probeer de grootte van de ImageView te hardcoderen naar iets speciaals en kijk of dat het probleem oplost.

Het tweede probleem is heel eenvoudig op te lossen. U hoeft alleen BitmapFactory aan te geven om de afbeelding te downsamplen wanneer deze geladen is. Hier is een voorbeeld:

int inSample = 4;//specifies how many 1/N samples to keep, in this case 1/4 off all samples are kept 

opts = new BitmapFactory.Options();
opts.inSampleSize = inSample;

Bitmap b = BitmapFactory.decodeResource(c.getResources(), imgResId, opts);

For a more longer explanation see my answer to this question: Android GalleryView Recycling

1
toegevoegd
hallo daar, ik heb mijn bericht bijgewerkt, zodat je een codefragment kunt zien.
toegevoegd de auteur turtleboy, de bron
Hallo, ik heb geen imageview, maar een aangepaste viewklasse. maakt dit een verschil voor de hulp die u biedt?
toegevoegd de auteur turtleboy, de bron
@turtleboy alleen met betrekking tot de methode imgView.setScaleType() . De andere dingen kunnen nog steeds hetzelfde zijn.
toegevoegd de auteur slayton, de bron