Android ||如何解析图像从一个活动到另一个?

问题描述:

这是我的代码。我想在这里添加一个按钮,点击将图像发送到下一个活动,但我无法配置它。我应该怎么做?Android ||如何解析图像从一个活动到另一个?

public class MainActivity extends Activity { 
private static int RESULT_LOAD_IMG = 1; 
String imgDecodableString; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 

public void loadImagefromGallery(View view) { 
    // Create intent to Open Image applications like Gallery, Google Photos 
    Intent galleryIntent = new Intent(Intent.ACTION_PICK, 
      android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
    // Start the Intent 
    startActivityForResult(galleryIntent, RESULT_LOAD_IMG); 
} 



@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    try { 
     // When an Image is picked 
     if (requestCode == RESULT_LOAD_IMG && resultCode == RESULT_OK 
       && null != data) { 
      // Get the Image from data 

      Uri selectedImage = data.getData(); 
      String[] filePathColumn = { MediaStore.Images.Media.DATA }; 

      // Get the cursor 
      Cursor cursor = getContentResolver().query(selectedImage, 
        filePathColumn, null, null, null); 
      // Move to first row 
      cursor.moveToFirst(); 

      int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
      imgDecodableString = cursor.getString(columnIndex); 
      cursor.close(); 
      ImageView imgView = (ImageView) findViewById(R.id.imgView); 
      // Set the Image in ImageView after decoding the String 
      imgView.setImageBitmap(BitmapFactory 
        .decodeFile(imgDecodableString)); 

     } else { 
      Toast.makeText(this, "You haven't picked Image", 
        Toast.LENGTH_LONG).show(); 
     } 
    } catch (Exception e) { 
     Toast.makeText(this, "Something went wrong", Toast.LENGTH_LONG) 
       .show(); 
    } 

} 
+3

将文件名传递给下一个活动。 –

+1

您已经拥有包含图像串,只是用发送意图额外 – faruk

+0

我写使用发送代码意图奥妙,但如何得到它的下一个活动公共无效nextActivity(查看视图){ 意向意图=新的意图(这,DisplayActivity.class); intent.putExtra(“bmp_image”,imgDecodableString); startActivity(intent); } –

最初,保持新添加的按钮关闭和获取图像串启动按钮,并设置onClickListener到按钮后onActivityResult方法。并使用intent extra将该图像字符串传递给下一个活动。

onActivityResult方法,

newButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       startActivity(new Intent(getApplicationContext(),NextActivity.class).putExtra("img",imgDecodableString)); 
      } 
     }); 
+0

我实现了ur代码......并跳转到下一个活动,并在那里得到空白页....在logcat中我得到这个...... **键img预期Parcelable但值是一个java.lang 。串。返回了默认值。 W/Bundle:尝试投射生成的内部异常:** –

+0

如何在下一个活动中获取字符串您在下一个活动中编写了哪些代码? –

+0

这是下一个activit的代码---------------------------------> _ protected void onCreate(Bundle savedInstanceState ){ super.onCreate(savedInstanceState); 位图imgDecodeableString =(位图)this.getIntent()。getParcelableExtra(“img”); setContentView(R.layout.activity_display); ImageView imgView =(ImageView)findViewById(R.id.imageView); imgView.setImageBitmap(imgDecodeableString); } } –

你可以把数据在你的第一个活动像

Intent intent = new Intent(this, NewActivity.class); 
intent.putExtra("BitmapImage", bitmap); 

,并在第二个活动分析数据如下图所示:

Intent intent = getIntent(); 
Bitmap bitmap = (Bitmap) intent.getParcelableExtra("BitmapImage"); 

您的ImagePath转换为位图码剪断是:

BitmapFactory.Options options = new BitmapFactory.Options(); 
     options.inPreferredConfig = Bitmap.Config.ARGB_8888; 
     Bitmap bitmap = BitmapFactory.decodeFile(imagePath, options); 
+0

如果你不明白的解决方案。不要放弃奉献。意图只能从一个活动到另一个活动的原始数据类型,如果你想把图像的数据,你必须将其转换位图并解析它上面解释如果你不感兴趣不投入它。谢谢 !! –

+0

我还没有用它 –

+0

没关系,但你必须解决它。如果你有一个小尺寸的图像,它会工作。 –

最好的方式来处理大图像将使用Serializable,因为Intent和Parcelable都有大小限制。

这个问题的答案可能会帮助:Serializing and De-Serializing android.graphics.Bitmap in Java

//第一活动

Bitmap b = null; 
String bitmapString = getStringFromBitmap(b); 
Intent intent = new Intent(this, MainActivity.class); 
intent.putExtra("bitmapString", bitmapString); 

//第二活动

String receivedBitmapString = getIntent().getStringExtra("bitmapString"); 
     Bitmap receivedBitmap = getBitmapFromString(receivedBitmapString); 

//功能

private String getStringFromBitmap(Bitmap bitmapPicture) { 
    /* 
    * This functions converts Bitmap picture to a string which can be 
    * JSONified. 
    * */ 
    final int COMPRESSION_QUALITY = 100; 
    String encodedImage; 
    ByteArrayOutputStream byteArrayBitmapStream = new ByteArrayOutputStream(); 
    bitmapPicture.compress(Bitmap.CompressFormat.PNG, COMPRESSION_QUALITY, 
    byteArrayBitmapStream); 
    byte[] b = byteArrayBitmapStream.toByteArray(); 
    encodedImage = Base64.encodeToString(b, Base64.DEFAULT); 
    return encodedImage; 
    } 


    private Bitmap getBitmapFromString(String jsonString) { 
    /* 
    * This Function converts the String back to Bitmap 
    * */ 
    byte[] decodedString = Base64.decode(stringPicture, Base64.DEFAULT); 
    Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length); 
    return decodedByte; 
    } 

来源:Link