关闭

如何把一张特别大的图片,分成几十张小的图片,在最短的时间内给处理?

标签: android
216人阅读 评论(0) 收藏 举报

方法1:如果你将return-data设置为“true”,你将会获得一个与内部数据关联的Action,并且bitmap以此方式返回:(Bitmap)extras.getParcelable("data")。注意:如果你最终要获取的图片非常大,那么此方法会给你带来麻烦,所以你要控制outputX和outputY保持在较小的尺寸。鉴于此原因,在我的代码中没有使用此方法((Bitmap)extras.getParcelable("data"))。

下面是CropImage.java的源码片段:

// Return the cropped image directly or save it to the specified URI.
Bundle myExtras = getIntent().getExtras();
if (myExtras != null && (myExtras.getParcelable("data") != null || myExtras.getBoolean("return-data")))
{
    Bundle extras = new Bundle();
    extras.putParcelable("data", croppedImage);
    setResult(RESULT_OK,(new Intent()).setAction("inline-data").putExtras(extras));
    finish();
}

方法2: 如果你将return-data设置为“false”,那么在onActivityResult的Intent数据中你将不会接收到任何Bitmap,相反,你需要将MediaStore.EXTRA_OUTPUT关联到一个Uri,此Uri是用来存放Bitmap的。

但是还有一些条件,首先你需要有一个短暂的与此Uri相关联的文件地址,当然这不是个大问题(除非是那些没有sdcard的设备)。

下面是CropImage.java关于操作Uri的源码片段:

if (mSaveUri != null) {
    OutputStream outputStream = null;
    try {
        outputStream = mContentResolver.openOutputStream(mSaveUri);
        if (outputStream != null) {
            croppedImage.compress(mOutputFormat, 75, outputStream);
        }
    } catch (IOException ex) {
        // TODO: report error to caller
        Log.e(TAG, "Cannot open file: " + mSaveUri, ex);
    } finally {
        Util.closeSilently(outputStream);
    }
    Bundle extras = new Bundle();
    setResult(RESULT_OK, new Intent(mSaveUri.toString()).putExtras(extras));
}

代码示例:

我已经附上了一些代码示例,应该可以让你测试多种配置。请让我知道它对你是否有用。

代码下载: MediaStoreTest

免费下载地址在 http://linux.linuxidc.com/

用户名与密码都是www.linuxidc.com

具体下载目录在 /2012年资料/11月/11日/如何使用Android MediaStore裁剪大图片

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 thiz = this;
 setContentView(R.layout.main);
 mBtn = (Button) findViewById(R.id.btnLaunch);
 photo = (ImageView) findViewById(R.id.imgPhoto);
 mBtn.setOnClickListener(new OnClickListener() {

  public void onClick(View v) {
   try {
    // Launch picker to choose photo for selected contact
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
    intent.setType("image/*");
    intent.putExtra("crop", "true");
    intent.putExtra("aspectX", aspectX);
    intent.putExtra("aspectY", aspectY);
    intent.putExtra("outputX", outputX);
    intent.putExtra("outputY", outputY);
    intent.putExtra("scale", scale);
    intent.putExtra("return-data", return_data);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, getTempUri());
    intent.putExtra("outputFormat",
      Bitmap.CompressFormat.JPEG.toString()); <span style="color: rgb(72, 70, 90); line-height: normal; font-family: monospace; font-size: 11px; background-color: rgb(239, 239, 239);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// lol, negative boolean noFaceDetection</span> intent.putExtra("noFaceDetection", !faceDetection);
    if (circleCrop) {
     intent.putExtra("circleCrop", true);
    }

    startActivityForResult(intent, PHOTO_PICKED);
   } catch (ActivityNotFoundException e) {
    Toast.makeText(thiz, R.string.photoPickerNotFoundText,
      Toast.LENGTH_LONG).show();
   }
  }
 });

}

private Uri getTempUri() {
 return Uri.fromFile(getTempFile());
}

private File getTempFile() {
 if (isSDCARDMounted()) {

  File f = new File(Environment.getExternalStorageDirectory(),
    TEMP_PHOTO_FILE);
  try {
   f.createNewFile();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   Toast.makeText(thiz, R.string.fileIOIssue, Toast.LENGTH_LONG)
     .show();
  }
  return f;
 } else {
  return null;
 }
}

private boolean isSDCARDMounted() {
 String status = Environment.getExternalStorageState();

 if (status.equals(Environment.MEDIA_MOUNTED))
  return true;
 return false;
}

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

 switch (requestCode) {
 case PHOTO_PICKED:
  if (resultCode == RESULT_OK) {
   if (data == null) {
    Log.w(TAG, "Null data, but RESULT_OK, from image picker!");
    Toast t = Toast.makeText(this, R.string.no_photo_picked,
      Toast.LENGTH_SHORT);
    t.show();
    return;
   }

   final Bundle extras = data.getExtras();
   if (extras != null) {
    File tempFile = getTempFile();
    // new logic to get the photo from a URI
    if (data.getAction() != null) {
     processPhotoUpdate(tempFile);
    }
   }
  }
  break;
 }
}

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

一张图理解Faster—RCNN测试流程

请教同学Faster—RCNN测试流程,他让我看一个Faster—RCNN模型文件(自己找哈): 看了后,自己画了一张图: 注:conv:卷积             ...
  • ture_dream
  • ture_dream
  • 2016-10-19 17:22
  • 3512

opencv把一个图像copy到另一个图像中

把一个图片添加到另一个图片中#include #include #include using namespace std; int main(int argc, char* argv[]) { ...
  • swj110119
  • swj110119
  • 2016-03-22 19:31
  • 3197

如何在PPT中实现多张图片叠加在一起,点击消失一张出来下一张的效果

原文:http://blog.sina.com.cn/s/blog_4fc125320100p9ub.html  这两天在帮忙修改一个PPT的课件,主要内容是让学生学习关于职业的单词,在PPT里的...
  • u013812894
  • u013812894
  • 2014-02-27 21:54
  • 8952

把一张特别大的图片,分成几十张小的图片,在最短的时间内给处理?

说到图片切块,首先想到的是拼图游戏,在载入图片的时候回进行图片切块操作,增加难度的时候会再一次进行切块操作,不同的是切块的数量会更多。首先来看一下拼图算法:[java] view plain copy...
  • qq_36036650
  • qq_36036650
  • 2017-03-04 15:35
  • 524

照片批处理-可一张图片分成几张图

  • 2012-08-14 15:18
  • 2.18MB
  • 下载

java图片处理——多张图片合成一张Gif图片并播放或Gif拆分成多张图片

http://blog.csdn.net/joliny/article/details/3357171 http://blog.csdn.net/ycb1689/article/details/...
  • fdsdvsfjk
  • fdsdvsfjk
  • 2016-03-24 17:29
  • 1821

java图片处理——多张图片合成一张Gif图片并播放或Gif拆分成多张图片

1 多张jpg图合成gif动画   /** * 把多张jpg图片合成一张 * @param pic String[] 多个jpg文件名 包含路径 * @para...
  • ycb1689
  • ycb1689
  • 2012-10-15 09:39
  • 8015

如何在最短的时间内打造一支战斗力极强的团队

如果你去创办一个公司,从一开始就有很多困难需要克服,你会被资源约束、时间约束,还会有各种无穷尽的问题烦扰着你。但是,如果你利用得当,这样的挑战将成为你团队最大的财富。简单的利益关系,开放的氛围,灵活的...
  • lm_soso
  • lm_soso
  • 2015-12-15 15:07
  • 449

如何让APP在最短的时间内成功上线?

许多公司在开发APP时时常遇到这样的问题,公司自己没有专业的测试团队,将APP外包给研发团队负责后,计划上线的APP因BUG太多无法在规定时间内上线。还有的公司筹划着自己组建测试团队,可是这样耗时耗费...
  • qiansanjia
  • qiansanjia
  • 2016-04-26 14:39
  • 683

如何让APP在最短的时间内上线

许多公司在开发APP时时常遇到这样的问题,公司自己没有专业的测试团队,将APP外包给研发团队负责后,计划上线的APP因BUG太多无法在规定时间内上线。还有的公司筹划着自己组建测试团队,可是这样耗时耗费...
  • qiansanjia
  • qiansanjia
  • 2016-05-23 15:06
  • 184
    个人资料
    • 访问:1110次
    • 积分:23
    • 等级:
    • 排名:千里之外
    • 原创:0篇
    • 转载:5篇
    • 译文:0篇
    • 评论:1条
    文章存档
    最新评论