Android之Bitmap使用心得(持续更新)
2012-04-26 11:28
543 查看
因为此代码里面有解释,因此直接上代码:
public class ChangeBitmapPixel extends Activity {
private Button btn;
private Bitmap photo;
private ImageView image;
FileOutputStream fos = null;
BufferedOutputStream bos = null;
private ByteArrayOutputStream baos;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
image = (ImageView) findViewById(R.id.image);
btn = (Button) findViewById(R.id.button);
btn.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i = new Intent("android.media.action.IMAGE_CAPTURE");
//如果使用下面注释的代码,将不返回数据给Intent
// i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment
// .getExternalStorageDirectory(),"pic.jpg")));
//启动摄像头并且在拍摄后返回
startActivityForResult(i, 10);
}});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//两种读取文件的方法
Uri uri = data.getData();
if (uri != null) {
System.out.println("uri不为空");
photo = BitmapFactory.decodeFile(uri.getPath());
System.out.println("uri:"+photo);
}
if (photo == null) {
Bundle bundle = data.getExtras();
if (bundle != null) {
photo = (Bitmap) bundle.get("data");
image.setImageBitmap(photo);
//保存照片
savePic(photo);
System.out.println("photo:"+photo);
} else {
Toast.makeText(ChangeBitmapPixel.this,
"为空",
Toast.LENGTH_LONG).show();
return;
}
}
super.onActivityResult(requestCode, resultCode, data);
}
public void savePic(Bitmap bitmap){
//使用此流读取
baos = new ByteArrayOutputStream();
//第二个参数影响的是图片的质量,但是图片的宽度与高度是不会受影响滴
bitmap.compress(Bitmap.CompressFormat.JPEG, 80, baos);
//这个函数能够设定图片的宽度与高度
//Bitmap map = Bitmap.createScaledBitmap(bitmap, 400, 400, true);
//把数据转为为字节数组
byte[] byteArray = baos.toByteArray();
try {
fos = new FileOutputStream(Environment.getExternalStorageDirectory()+"pic.jpg");
bos = new BufferedOutputStream(fos);
bos.write(byteArray);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
baos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}}
public class ChangeBitmapPixel extends Activity {
private Button btn;
private Bitmap photo;
private ImageView image;
FileOutputStream fos = null;
BufferedOutputStream bos = null;
private ByteArrayOutputStream baos;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
image = (ImageView) findViewById(R.id.image);
btn = (Button) findViewById(R.id.button);
btn.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i = new Intent("android.media.action.IMAGE_CAPTURE");
//如果使用下面注释的代码,将不返回数据给Intent
// i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment
// .getExternalStorageDirectory(),"pic.jpg")));
//启动摄像头并且在拍摄后返回
startActivityForResult(i, 10);
}});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//两种读取文件的方法
Uri uri = data.getData();
if (uri != null) {
System.out.println("uri不为空");
photo = BitmapFactory.decodeFile(uri.getPath());
System.out.println("uri:"+photo);
}
if (photo == null) {
Bundle bundle = data.getExtras();
if (bundle != null) {
photo = (Bitmap) bundle.get("data");
image.setImageBitmap(photo);
//保存照片
savePic(photo);
System.out.println("photo:"+photo);
} else {
Toast.makeText(ChangeBitmapPixel.this,
"为空",
Toast.LENGTH_LONG).show();
return;
}
}
super.onActivityResult(requestCode, resultCode, data);
}
public void savePic(Bitmap bitmap){
//使用此流读取
baos = new ByteArrayOutputStream();
//第二个参数影响的是图片的质量,但是图片的宽度与高度是不会受影响滴
bitmap.compress(Bitmap.CompressFormat.JPEG, 80, baos);
//这个函数能够设定图片的宽度与高度
//Bitmap map = Bitmap.createScaledBitmap(bitmap, 400, 400, true);
//把数据转为为字节数组
byte[] byteArray = baos.toByteArray();
try {
fos = new FileOutputStream(Environment.getExternalStorageDirectory()+"pic.jpg");
bos = new BufferedOutputStream(fos);
bos.write(byteArray);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
baos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}}
相关文章推荐
- Android中AlarmManager使用示例(持续更新,已经更改)
- Android WebView 使用总结--持续更新
- android 使用360插件化DroidPlugin碰到的坑(持续更新)
- android使用笔记 持续更新中。。。
- 【Intent】Android系统Intent使用大全(持续更新中...)
- 使用Android Studio开发android应用(持续更新)
- Android——ListView使用过程中的常用属性(持续更新)
- 关于android 使用bitmap的OOM心得和解决方案
- 关于android 使用bitmap的OOM心得和解决方案
- Android adb 使用学习【持续更新...】
- Masonry介绍与使用实践和各种使用心得,持续更新~
- mac idea使用心得--不定期持续更新
- Andriod Studio 使用心得,持续更新中
- Android中AlarmManager使用示例(持续更新,关于时间的设置已经更改)
- vim使用心得(持续更新)
- Android中Webview使用经验总结(持续更新)
- git+github个人使用心得总结(持续更新)
- android app测试使用过的测试工具总结(持续更新)
- pycharm的使用心得---持续更新
- 上手Android源码探索AOSP的奥秘过程笔记(不是教程,只是自己遇到的问题或者心得的笔记,持续更新)