2016-03-24 4 views
0

Android uygulamalarında imageview ile ilgili bir sorunum var, kameradan resim çektikten veya galeriden resim aldıktan sonra resmi yuvarlaklaştırmak istiyorum. Ben kameradan fotoğraf çekmeye gidiyorum, bu normalde işlev, ama ben galeriden görüntü almak ile gidersem logcat içinde gösterilmiyor bazı hata var. BuradaImageView galeriye fotoğraf çekerken bir görüntüyü göstermiyor Android Uygulamaları

kodum:

public Bitmap getCroppedBitmap(Bitmap bitmap) { 
    Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas(output); 

    final Paint paint = new Paint(); 
    final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); 

    paint.setAntiAlias(true); 
    canvas.drawARGB(0, 0, 0, 0); 
    canvas.drawCircle(bitmap.getWidth()/2, bitmap.getHeight()/2, bitmap.getWidth()/2, paint); 
    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); 
    canvas.drawBitmap(bitmap, rect, rect, paint); 
    Bitmap _bmp = Bitmap.createScaledBitmap(output, 300, 300, false); 
    return _bmp; 
} 

ve bu kodu: Görüntüyü yuvarlamak

private void selectImage() { 
    final CharSequence[] options = { "Take Photo", "Choose from Gallery","Cancel" }; 
    AlertDialog.Builder builder = new AlertDialog.Builder(ActivityRegister.this); 
    builder.setTitle("Add Photo!"); 
    builder.setItems(options, new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int item) { 
      if (options[item].equals("Take Photo")) { 
       //define the file-name to save photo taken by Camera activity 
       String fileName = "new-photo-name.jpg"; 
       //create parameters for Intent with filename 
       ContentValues values = new ContentValues(); 
       values.put(MediaStore.Images.Media.TITLE, fileName); 
       values.put(MediaStore.Images.Media.DESCRIPTION, "Image capture by camera"); 
       //imageUri is the current activity attribute, define and save it for later usage (also in onSaveInstanceState) 
       imageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); 
       //create new Intent 
       Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
       intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); 
       intent.putExtra("crop", "true"); 
       intent.putExtra("aspectX", -1); 
       intent.putExtra("aspectY", -1); 
       intent.putExtra("outputX", 200); 
       intent.putExtra("outputY", 200); 

       startActivityForResult(intent, PICK_Camera_IMAGE); 
      }else if (options[item].equals("Choose from Gallery")){ 
       try{ 
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
        intent.setType("image/*"); 
        intent.putExtra("crop", "true"); 
        intent.putExtra("aspectX", -1); 
        intent.putExtra("aspectY", -1); 
        intent.putExtra("outputX", 200); 
        intent.putExtra("outputY", 200); 
        intent.putExtra("return-data", true); 

        startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE); 
       }catch (Exception e){ 
        Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show(); 
        Log.e(e.getClass().getName(), e.getMessage(), e); 
       } 
      }else if (options[item].equals("Cancel")){ 
       dialog.dismiss(); 
      } 
     } 
    }); 
    builder.show(); 
} 

kırpma:

bu kod resim çekmek veya galeriden almak için Seçenek menüsünü çağırmak için görüntüyü çözmek için kameradan veya galeriden görüntüleri çözme

public void decodeFile(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 = BitmapFactory.decodeFile(filePath, o2); 
    ivImages.setImageBitmap(getCroppedBitmap(bitmap)); 
} 

bu benim onActivityResult() Kod: benim kötü İngilizce

+0

ONActivityResult() öğesini geçersiz kıldınız mı? – Jois

+0

OnActivityResult() kodunuzu paylaşın. – AKSiddique

+0

OnActivityResult() 'da geçersiz kılmadım. @Jois –

cevap

0

için

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    Uri selectedImageUri = null; 
    String filePath = null; 
    switch (requestCode) { 
     case PICK_IMAGE: 
      if (resultCode == Activity.RESULT_OK) { 
       Bundle extra = data.getExtras(); 
       if(extra != null) { 
        selectedImageUri = data.getData(); 
       } 
      } 
      break; 
     case PICK_Camera_IMAGE: 
      if (resultCode == RESULT_OK) { 
       //use imageUri here to access the image 
       selectedImageUri = imageUri; 
       /* 
       Bitmap mPic = (Bitmap) data.getExtras().get("data"); 
       selectedImageUri = Uri.parse(MediaStore.Images.Media.insertImage(getContentResolver(), mPic, getResources().getString(R.string.app_name), Long.toString(System.currentTimeMillis()))); 
       */ 
      } else if (resultCode == RESULT_CANCELED) { 
       Toast.makeText(this, "Picture was not taken", Toast.LENGTH_SHORT).show(); 
      } else { 
       Toast.makeText(this, "Picture was not taken", Toast.LENGTH_SHORT).show(); 
      } 
      break; 
    } 

    if(selectedImageUri != null){ 
     try { 
      // OI FILE Manager 
      String filemanagerstring = selectedImageUri.getPath(); 
      // MEDIA GALLERY 
      String selectedImagePath = getPath(selectedImageUri); 
      if (selectedImagePath != null) { 
       filePath = selectedImagePath; 
      } else if (filemanagerstring != null) { 
       filePath = filemanagerstring; 
      } else { 
       Toast.makeText(getApplicationContext(), "Unknown path", Toast.LENGTH_LONG).show(); 
       Log.e("Bitmap", "Unknown path"); 
      } 

      if (filePath != null) { 
       decodeFile(filePath); 
      } else { 
       bitmap = null; 
      } 
     } catch (Exception e) { 
      Toast.makeText(getApplicationContext(), "Internal error", Toast.LENGTH_LONG).show(); 
      Log.e(e.getClass().getName(), e.getMessage(), e); 
     } 
    } 
} 

Üzgünüm aynı sorunu vardı. Resmi elde etmek için bu şekilde yapın. Bu, görüntüyü bu seçili görüntüye ayarlamaya çalışırken

için çalıştıysa, kod böyle devam eder.

Etkinlik sınıfı

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if (resultCode == RESULT_OK && null != data) { 
     Uri selectedImage = data.getData(); 





     Bitmap bitmap = null; 
     try { 
      bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), selectedImage); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     Bitmap resized = Bitmap.createScaledBitmap(bitmap, 100, 100, true); 
       imageView.setImageBitmap(ProfilePicture.getRoundedRectBitmap(resized)); 



    } 


} 

ImageConvertor Sınıf

public class ProfilePicture { 
    public static Bitmap getRoundedRectBitmap() { 
     Bitmap result = null; 
     try { 
      result = Bitmap.createBitmap(200, 200, Bitmap.Config.ARGB_8888); 
      Canvas canvas = new Canvas(result); 

      int color = 0xff424242; 
      Paint paint = new Paint(); 
      Rect rect = new Rect(0, 0, 200, 200); 

      paint.setAntiAlias(true); 
      canvas.drawARGB(0, 0, 0, 0); 
      paint.setColor(color); 
      canvas.drawCircle(50, 50, 50, paint); 
      paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); 
    canvas.drawBitmap(bitmap, rect, rect, paint); 



     } catch (NullPointerException e) { 
     } catch (OutOfMemoryError o) { 
     } 
     return result; 
    } 

MediaStore.Images.Media.getBitmap(getContentResolver(), selectedImage); Eğer ContentResolver yardımıyla galerisinden seçilen görüntü elde etmek için yardımcı olan bu hattı.

Umarım bu yardımcı olmuştur. Thnakyou

+0

'un altına ekleyebilir miyim? Yardımınız için –

+0

thank teşekkürler @Jois, ve i got that solved. Teşekkürler –

+0

Kodumu düzenledim. profilePicture adlı yeni bir sınıf ekledim. kodunuzda kullanmak aslında basittir. Umarım bu sağa o zaman – Jois