【问题标题】:Android - How can I get image from ClipData?Android - 如何从 ClipData 获取图像?
【发布时间】:2014-03-12 03:58:16
【问题描述】:

我正在创建一个能够一次上传多个图像的图像上传器。

galerijButton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
        photoPickerIntent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);

        photoPickerIntent.setType("image/*");
        startActivityForResult(photoPickerIntent, SELECT_PHOTO);   
    }
});

...

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

    switch(requestCode) { 
    case SELECT_PHOTO:
        if(resultCode == RESULT_OK){  
            if(imageReturnedIntent.getData() != null){
                //If uploaded with Android Gallery (max 1 image)
                Uri selectedImage = imageReturnedIntent.getData();
                InputStream imageStream;
                try {
                    imageStream = getContentResolver().openInputStream(selectedImage);
                    Bitmap yourSelectedImage = BitmapFactory.decodeStream(imageStream);
                    photos.add(yourSelectedImage);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
            } else {
                //If uploaded with the new Android Photos gallery
                ClipData clipData = imageReturnedIntent.getClipData();
                for(int i = 0; i < clipData.getItemCount(); i++){
                    clipData.getItemAt(i);
                    //What now?
                }
            }
        }
    break;
    ....

我想将所有选定的图像添加到我的照片数组中,这是一个 ArrayList&lt;Bitmap&gt; 。我必须以某种方式将ClipData.Item 转换为Bitmap,但是如何?

【问题讨论】:

  • 您是否要从剪贴板复制图像?
  • 不,我正在使用 Android 照片应用程序一次上传多张图片。 Android Photos 应用程序将所选图像放入 (Intent) imageReturnedIntent.getClipData();我知道这一点,因为该数组的大小始终是所选图像的数量。

标签: android image upload android-photos


【解决方案1】:

使用 Kotlin one liner 实现:

private fun ClipData.convertToList(): List<Uri> = 0.until(itemCount).map { getItemAt(it).uri }

【讨论】:

    【解决方案2】:

    试试这个

    ClipData.Item item = clip.getItemAt(i);
    Uri uri = item.getUri();
    

    现在您有了图像的 URI

    我想你现在知道该怎么做了。干杯:)

    【讨论】:

      【解决方案3】:

      您将图像编码为字符串,并在您想使用它时将其解码回图像。

      对于图像列表,创建一个字符串数组并将这些图像保存在其中。

      public static String encodeTobase64(Bitmap image) {
          Bitmap immage = image;
          ByteArrayOutputStream baos = new ByteArrayOutputStream();
          immage.compress(Bitmap.CompressFormat.JPEG, 100, baos);
          byte[] b = baos.toByteArray();
          String imageEncoded = Base64.encodeToString(b, Base64.DEFAULT);
          Log.d("Image Log:", imageEncoded);
          return imageEncoded;
      }
      
      public static Bitmap decodeBase64(String input) {
          try {
              byte[] encodeByte = Base64.decode(input, Base64.DEFAULT);
              InputStream is = new ByteArrayInputStream(encodeByte);
              BitmapFactory.Options options = new BitmapFactory.Options();
              options.inPreferredConfig = Config.ALPHA_8;
              options.inSampleSize = 2;
              Bitmap bitmap = BitmapFactory.decodeStream(is, null, options);
              return bitmap;
          } catch (Exception e) {
              e.getMessage();
              return null;
          }
      }
      

      【讨论】:

      • 谢谢,我试试看
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多