2016-03-24 11 views
0

アンドロイドアプリでimageviewに問題があります。カメラから写真を撮ったり、ギャラリーから画像を取得した後に画像を丸くしたいと思っています。私はカメラから写真を撮るつもりですが、その機能は普通ですが、ギャラリーから画像を取得すると、logcatに表示されない場所でエラーが発生します。ここギャラリーから写真を撮るときにImageViewが表示されないAndroid Apps

私のコード:

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; 
} 

と、このコード:画像を丸める

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(); 
} 

作物:

このコードは写真を撮るか、ギャラリーから取得するオプションメニューを呼び出しますカメラやギャラリーから画像をデコードする

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)); 
} 

この私のonActivityResult()コード:私の悪い英語

+0

ONActivityResult()をオーバーライドしましたか? – Jois

+0

onActivityResult()コードを共有します。 – AKSiddique

+0

私はonActivityResult()にオーバーライドを入れませんでした。 @Jois –

答えて

0

ため

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); 
     } 
    } 
} 

申し訳ありませんが、私は同じ問題を持っていました。イメージをこのようにするには。これは私のために働いた

この選択されたイメージにimageViewを設定しようとすると、コードはこのようになります。

Activityクラス

@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クラス

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);はContentResolverのの助けを借りて、ギャラリーから選択した画像を取得するのに役立ちます。

これは役に立ちましたと思います。 Thnakyou

+0

を追加しましたか?感謝の –

+0

あなたの助けに感謝@ジョイス、そして私はそれを解決しました。ありがとうございました –

+0

私は自分のコードを編集しました。 profilePictureという新しいクラスを追加しました。あなたのコードでそれを実際に使用するのは簡単です。私はこれが助けてくれることを願っています – Jois

関連する問題