android – 活动返回图片

前端之家收集整理的这篇文章主要介绍了android – 活动返回图片前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在我的活动中返回一个位图,以便其他应用程序可以使用它.

返回文本很清楚.

  1. Intent data = new Intent();
  2. data.putExtra("text1","text.");
  3. data.putExtra("text2","longer text.");
  4. setResult(RESULT_OK,data);

但是如何返回位图?

更多信息:
该活动有几个意图可供想要获取图像的每个人使用.

  1. <intent-filter>
  2. <action android:name="android.intent.action.GET_CONTENT" />
  3. <category android:name="android.intent.category.OPENABLE" />
  4. <category android:name="android.intent.category.DEFAULT" />
  5. <data android:mimeType="image/*" />
  6. <data android:mimeType="vnd.android.cursor.dir/image" />
  7. </intent-filter>
  8. <intent-filter>
  9. <action android:name="android.intent.action.PICK" />
  10. <category android:name="android.intent.category.DEFAULT" />
  11. <data android:mimeType="image/*" />
  12. <data android:mimeType="vnd.android.cursor.dir/image" />
  13. </intent-filter>

编辑:
以下是一个功能解决方案:

  1. public void finish(Bitmap bitmap) {
  2. try {
  3. File folder = new File(Environment.getExternalStorageDirectory() + "/Icon Select/");
  4. if(!folder.exists()) {
  5. folder.mkdirs();
  6. }
  7. File nomediaFile = new File(folder,".nomedia");
  8. if(!nomediaFile.exists()) {
  9. nomediaFile.createNewFile();
  10. }
  11.  
  12. FileOutputStream out = new FileOutputStream(Environment.getExternalStorageDirectory() + "/Icon Select/latest.png");
  13. bitmap.compress(Bitmap.CompressFormat.PNG,90,out);
  14. File bitmapFile = new File(Environment.getExternalStorageDirectory() + "/Icon Select/latest.png");
  15.  
  16. if(bitmapFile.exists()) {
  17. Intent localIntent = new Intent().setData(Uri.fromFile(bitmapFile));
  18. setResult(RESULT_OK,localIntent);
  19. } else {
  20. setResult(RESULT_CANCELED);
  21. }
  22. super.finish();
  23.  
  24. } catch (Exception e) {
  25. e.printStackTrace();
  26. Log.d("beewhale","Error writing data");
  27. }
  28. }

解决方法

虽然我同意Ovidiu Latcu,但您可能会遇到内存问题.

将位图存储到SD卡上的临时位置可能更好.然后从那里访问它. (写入和读取位图到文件).

或者,如果您确实希望将字节数组作为额外内容,则首先将位图压缩为另一种格式,例如Jpeg或类似的,这将再次减少内存问题的变化.

一个简单的8M像素图像,是32MB(4层).这超出了应用程序大多数(如果不是全部)手机的允许内存使用量.

直接存储到存储是内置相机应用程序如何工作以避免此问题.

这是我处理它的代码

  1. public void showCameraScreen(View view) {
  2. // BUILT IN CAMERA
  3. Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
  4. camera.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(getTempFile(this)) );
  5. this.startActivityForResult(camera,1);
  6.  
  7. }
  8.  
  9. private File getTempFile(Context context) {
  10. // it will return /sdcard/MyImage.tmp
  11. final File path = new File(Environment.getExternalStorageDirectory(),context.getPackageName());
  12. if (!path.exists()) {
  13. path.mkdir();
  14. }
  15. return new File(path,"MyImage.tmp");
  16. }
  17.  
  18. @Override
  19. protected void onActivityResult(int requestCode,int resultCode,Intent data) {
  20. if (requestCode == 1 && resultCode == RESULT_OK) {
  21. final File file = getTempFile(this);
  22.  
  23. byte[] _data = new byte[(int) file.length()];
  24. try {
  25. InputStream in = new FileInputStream(file);
  26. in.read(_data);
  27. in.close();
  28. in = null;
  29. //DO WHAT YOU WANT WITH _data. The byte array of your image.
  30. } catch (Exception E) {
  31.  
  32. }
  33. }
  34. }

注意:您还需要在被调用的intent上编写代码,这些代码存储到传递的Uri中 – 这里,内置的摄像头api就可以了.

猜你在找的Android相关文章