使用内置摄像头并优化显示结果大图片的方法
【摘要】
1.将BitmapFactory.Options.inJustDecodeBounds变量设置为true,这表示通知BitmapFactory类只需返回该类图像的范围,而不用解码图像本身。使用此方法,BitmapFactory.Options.outHeight和BitmapFactory.Options.outWidth变量将会被赋值...
1.将BitmapFactory.Options.inJustDecodeBounds变量设置为true,这表示通知BitmapFactory类只需返回该类图像的范围,而不用解码图像本身。使用此方法,BitmapFactory.Options.outHeight和BitmapFactory.Options.outWidth变量将会被赋值。
2.通过给内置的Camera应用程序传递一个附加值(该附加值在MediaStore类中指定,MediaStore.EXTRA_OUTPUT),我们能以Uri的形式指定Camera应用保存捕获图像的位置。以下的示例就将图像保存在SD卡中。注意:别忘了在AndroidManifest.xml文件中添加以下语句:
-
<intent-filter>
-
<action android:name="android.media.action.IMAGE_CAPTURE"/>
-
<category android:name="android.intent.category.DEFAULT"/>
-
</intent-filter>
-
public class SizedImageCamera extends Activity
-
{
-
final static int CAMERA_RESULT = 0;
-
ImageView imv;
-
String imageFilePath;
-
-
@Override
-
protected void onActivityResult(int requestCode, int resultCode, Intent data)
-
{
-
// TODO Auto-generated method stub
-
super.onActivityResult(requestCode, resultCode, data);
-
if(resultCode==RESULT_OK)
-
{
-
imv=(ImageView)findViewById(R.id.ImageView);
-
Display currentDisplay=getWindowManager().getDefaultDisplay();
-
int dw=currentDisplay.getWidth();
-
int dh=currentDisplay.getHeight();
-
// 加载图像的尺寸而不是图像本身
-
BitmapFactory.Options bmpFactoryOptions=new BitmapFactory.Options();
-
bmpFactoryOptions.inJustDecodeBounds=true;
-
Bitmap bmp=BitmapFactory.decodeFile(imageFilePath, bmpFactoryOptions);
-
-
int heightRatio=(int)Math.ceil(bmpFactoryOptions.outHeight/(float)dh);
-
int widthRatio=(int)Math.ceil(bmpFactoryOptions.outWidth/(float)dw);
-
Log.v("HEIGHT RATIO",""+heightRatio);
-
Log.v("WIDTH RATIO",""+widthRatio);
-
-
// 如果两个比率都大于1,那么图像的一条边将大于屏幕
-
if(heightRatio>1&&widthRatio>1)
-
{
-
if(heightRatio>widthRatio)
-
{
-
// 如果高度比率更大,则根据它缩放
-
bmpFactoryOptions.inSampleSize=heightRatio;
-
}
-
else
-
{
-
// 若宽度比率更大,则根据它缩放
-
bmpFactoryOptions.inSampleSize=widthRatio;
-
}
-
}
-
// 对它进行真正的解码
-
bmpFactoryOptions.inJustDecodeBounds=false;
-
bmp=BitmapFactory.decodeFile(imageFilePath, bmpFactoryOptions);
-
imv.setImageBitmap(bmp);
-
}
-
}
-
-
@Override
-
protected void onCreate(Bundle savedInstanceState)
-
{
-
// TODO Auto-generated method stub
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.main);
-
imageFilePath = Environment.getExternalStorageDirectory()
-
.getAbsolutePath() + "mypicture.jpg";
-
File imageFile = new File(imageFilePath);
-
Uri imageFileUri = Uri.fromFile(imageFile);
-
-
Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
-
i.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, imageFileUri);
-
startActivityForResult(i, CAMERA_RESULT);
-
}
-
}
4.给图像添加元数据ContentValues
(1)预填充
-
ContentValues contentValues=new ContentValues(3);
-
contentValues.put(Media.DISPLAY_NAME,"title");
-
contentValues.put(Media.DESCRIPTION,"description");
-
contentValues.put(Media.MIME_TYPE,"image/jpeg");
-
Uri imageFileUri=getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, contentValues);
-
ContentValues contentValues=new ContentValues(3);
-
contentValues.put(Media.DISPLAY_NAME,"title");
-
contentValues.put(Media.DESCRIPTION,"description");
-
contentValues.put(Media.MIME_TYPE,"image/jpeg");
-
getContentResolver().update(imageFileUri, contentValues,null,null);
Bitmap bmp=BitmapFactory.decodeStream(getContentResolver().openInputStream(imageFileUri),null,bmpFactoryOptions);
setVisibility(View.GONE):将用户的元素都设置为不可见,且不占用布局空间
setVisibility(View.INVISIBLE):将隐藏元素,但是占用布局空间
文章来源: panda1234lee.blog.csdn.net,作者:panda1234lee,版权归原作者所有,如需转载,请联系作者。
原文链接:panda1234lee.blog.csdn.net/article/details/8709999
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)