国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

解決Android從相冊(cè)中獲取圖片出錯(cuò)圖片卻無法裁剪問題的方法

2020-04-11 10:58:46
字體:
供稿:網(wǎng)友

在學(xué)習(xí)獲取相冊(cè)中圖片進(jìn)行裁剪的時(shí)候遇到了比較大的問題,在糾結(jié)了近半天才真的解決,下面分享一下學(xué)習(xí)經(jīng)驗(yàn)。
問題:
選擇了相冊(cè)中的圖片之后要進(jìn)入圖片裁剪的時(shí)候出錯(cuò),(華為)手機(jī)提示“此圖片無法獲取”,經(jīng)百度后,明白是版本不同導(dǎo)致的URI的問題的問題,原文如下:

  • 4.3或以下,選了圖片之后,根據(jù)Uri來做處理,很多帖子都有了,我就不詳細(xì)說了.主要是4.4,如果使用上面pick的原生方法來選圖,返回的uri還是正常的,但如果用ACTION_GET_CONTENT的方法,返回的uri跟4.3是完全不一樣的,4.3返回的是帶文件路徑的,而4.4返回的卻是content://com.android.providers.media.documents/document/image:3951這樣的,沒有路徑,只有圖片編號(hào)的uri.這就導(dǎo)致接下來無法根據(jù)圖片路徑來裁剪的步驟了.

在程序可以運(yùn)行之后也是進(jìn)行了一定的測(cè)試,如下圖:

首先是用onActivityResult接收到的返回值作為Toast輸出:

得到如下效果:

然后是用該圖片的絕對(duì)路徑作為Toast輸出:

得到如下效果:

果然是如該博文所講,那么到底要如何修改呢?由于各個(gè)讀者碰到的問題不同,只能附上筆者從相冊(cè)中選擇圖片并且裁剪的源碼僅作參考。

如實(shí)在有不懂的,可以訪問筆者的上一篇博客,運(yùn)行一下筆者提供的demo。

MainActivity:

import java.io.File; import java.io.FileNotFoundException; import java.io.IOException;  import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; import android.widget.Toast;  public class MainActivity extends Activity {   public static final int CUT_PICTURE = 1;   public static final int SHOW_PICTURE = 2;   private Button takePhoto;   private Button chooseFromAlbum;   private ImageView picture;   private Uri imageUri;   @Override  protected void onCreate(Bundle savedInstanceState) {   super.onCreate(savedInstanceState);   setContentView(R.layout.activity_main);   takePhoto = (Button) findViewById(R.id.take_photo);   chooseFromAlbum = (Button) findViewById(R.id.choose_from_album);   picture = (ImageView) findViewById(R.id.picture);    takePhoto.setOnClickListener(new OnClickListener() {    @Override    public void onClick(View v) {     //創(chuàng)建File對(duì)象,用于存儲(chǔ)拍照后的圖片     //將此圖片存儲(chǔ)于SD卡的根目錄下     File outputImage = new File(Environment.getExternalStorageDirectory(),       "output_image.jpg");     try {      if (outputImage.exists()) {       outputImage.delete();      }      outputImage.createNewFile();     } catch (IOException e) {      e.printStackTrace();     }     //將File對(duì)象轉(zhuǎn)換成Uri對(duì)象     //Uri表標(biāo)識(shí)著圖片的地址     imageUri = Uri.fromFile(outputImage);     //隱式調(diào)用照相機(jī)程序     Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");     //拍下的照片會(huì)被輸出到output_image.jpg中去     intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);     //此處是使用的startActivityForResult()     //因此在拍照完后悔有結(jié)果返回到onActivityResult()中去,返回值即為TAKE_PHOTO     //onActivityResult()中主要是實(shí)現(xiàn)圖片裁剪     startActivityForResult(intent, CUT_PICTURE);    }   });    chooseFromAlbum.setOnClickListener(new OnClickListener() {    @Override    public void onClick(View v) {     File outputImage = new File(Environment.getExternalStorageDirectory(),       "output_image.jpg");     imageUri = Uri.fromFile(outputImage);      try {      if (outputImage.exists()) {       outputImage.delete();      }      outputImage.createNewFile();     } catch (IOException e) {      e.printStackTrace();     }     Intent intent = new Intent(Intent.ACTION_PICK,null);     //此處調(diào)用了圖片選擇器     //如果直接寫intent.setDataAndType("image/*");     //調(diào)用的是系統(tǒng)圖庫(kù)     intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");     intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);     startActivityForResult(intent, CUT_PICTURE);    }   });  }    @Override  protected void onActivityResult(int requestCode, int resultCode, Intent data) {   switch (requestCode) {   case CUT_PICTURE:    if (resultCode == RESULT_OK) {     //此處啟動(dòng)裁剪程序     Intent intent = new Intent("com.android.camera.action.CROP");     //此處注釋掉的部分是針對(duì)android 4.4路徑修改的一個(gè)測(cè)試     //有興趣的讀者可以自己調(diào)試看看     String text=imageUri.toString();     Toast.makeText(MainActivity.this, text, Toast.LENGTH_SHORT).show();     intent.setDataAndType(data.getData(), "image/*");     intent.putExtra("scale", true);     intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);     startActivityForResult(intent, SHOW_PICTURE);    }    break;   case SHOW_PICTURE:    if (resultCode == RESULT_OK) {     try {      //將output_image.jpg對(duì)象解析成Bitmap對(duì)象,然后設(shè)置到ImageView中顯示出來      Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver()        .openInputStream(imageUri));      picture.setImageBitmap(bitmap);     } catch (FileNotFoundException e) {      e.printStackTrace();     }    }    break;   default:    break;   }  }    } 

以上就是為大家分享的解決Android圖片無法裁剪問題的方法,希望對(duì)大家的學(xué)習(xí)有所幫助。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 青州市| 杭州市| 长武县| 七台河市| 晋宁县| 武鸣县| 逊克县| 奉新县| 安达市| 泰顺县| 额尔古纳市| 蓬安县| 勐海县| 勃利县| 峨眉山市| 合肥市| 芦山县| 桂林市| 五华县| 奉新县| 乌兰察布市| 漠河县| 平泉县| 花垣县| 买车| 乌拉特中旗| 赤水市| 集贤县| 宝山区| 宁蒗| 五寨县| 榕江县| 龙门县| 贵南县| 郎溪县| 邻水| 天台县| 洞头县| 道真| 贺州市| 鸡泽县|