当前位置:编程学习 > wap >>

Android跳转相机拍照设置背景图片模糊拉伸问题的解决方法

各位开发者,你们好!

最近我在项目中碰到一个头痛的事情,在经过i按钮发送intent到相机界面拍摄图片作为activity的背景图片,碰到了两个问题,最后经过长时间苦战,终于一一解决。现将本人解决经验分享
,给各位程序员参考。共同进步

但由于android本身系统对bitmap尺寸的限制,直接通过getdatas()方法获得的图片被压缩的乱七八糟,图片十分的模糊,根本无法达到我们所需要的效果,后来经过网上一搜找到了一种解决办法,具体见这个帖子http://blog.csdn.net/tangren03/article/details/8654137。感谢这位大神,帮我解决了问题。

后来问题解决之后产生了一个新问题,就是把拍照的图片设置为背景之后马赛克没有了,但是图片呗强制的拉伸铺满整个屏幕,宽高比严重失调。网上说布局的xml文件的background的属性可以再自定义一个xml文件设置图片的显示模式设置为平铺或者居中显示,但是这个方法到我们这例子中就没有效果的,因为我们需要动态获取相机拍摄的图片,自定义里面的src属性本人目前还没有找到方法可以通过代码进行修改。这个方法只能放弃。经过本人刻苦长达两个小时的研究。终于找到了解决办法。具体如下


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);
  if (resultCode == RESULT_OK) {
   switch (requestCode) {
   case TAKE_PICTURE:
    //将保存在本地的图片取出并缩小后显示在界面上
     Bitmap bitmap = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory()+"/image.jpg");  
    Toast.makeText(this, "kuan"+ bitmap.getWidth()+"gao"+bitmap.getHeight(), 1).show();
    Bitmap newBitmap = ImageTools.zoomBitmap(bitmap, bitmap.getWidth() / 2, bitmap.getHeight() / 3);
    //由于Bitmap内存占用较大,这里需要回收内存,否则会报out of memory异常
    bitmap.recycle();
//canvas是画布对象,将缩小过后的bitmap对象传进画布,在进行保存
    Canvas canvas=new Canvas(newBitmap);
    canvas.save(Canvas.ALL_SAVE_FLAG);
    BitmapDrawable bitdra=new BitmapDrawable(newBitmap);
    //将处理过的图片显示在界面上,并保存到本地
    first_rel.setBackgroundDrawable(bitdra);
    ImageTools.savePhotoToSDCard(newBitmap, Environment.getExternalStorageDirectory().getAbsolutePath(), String.valueOf(System.currentTimeMillis()));
    break;

注意其中的一行代码:Bitmap newBitmap = ImageTools.zoomBitmap(bitmap, bitmap.getWidth() / 2, bitmap.getHeight() / 3);
这行代码里面的两个参数就是经过缩放过后的图片的宽高,我设置成为原来的2分之一或者三分之一,但道理说你把图片的尺寸变成了跟屏幕宽高比一样的自然就可以了。但是直接这样的话图片的拉伸情况没有任何变化,不管你如何设置宽高的数值。

后来我找到了解决办法,就是利用Canvas画布对象,你需要先将新生成的bitmap对象传入画布,然后再画布里进行保存,经过这一闹腾保存过后的bitmap对象就不一样了,他就能根据我的设置新的图片的宽高进行适应了,不要问我其中到底发生了什么,我也不知道,我只知道这样做可以解决这个问题!

附上我实际运行的效果:
android xml java
补充:移动开发 ,  Android
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,