pro.Android Media--处理大的图片
2012-01-15 13:29
316 查看
调用照相机程序,可以在intent中加入android.provider.MediaStore.EXTRA_OUTPUT 参数来设置图片保存位置。如下:
Java代码
String imageFilePath = Environment.getExternalStorageDirectory().getAbsolutePath()
+"/myfavoritepicture.jpg";
File imageFile = new File(imageFilePath);
Uri imageFileUri = Uri.fromFile(imageFile);
// Uri imageFileUri = Uri.parse("file:///sdcard/myfavoritepicture.jpg");
Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
i.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, imageFileUri);
startActivityForResult(i, CAMERA_RESULT);
对于大的图片,android加载的时候很有可能出现OOM(out of memory)。这个时候我们需要对图片进行处理。
图片加载到内存所占空间
-------------------------------------------------------------------------------------------
一张分辨率为1024×768,32位色彩的图像,其文件大小约为?
一、基础知识的掌握
首先我们必须明白,图片的每个像素所占的位数。
每个像素的位数,大体有如下几类。
1位,(单色);4位:(16色);8位(256色);
16(64K色,高彩色);24(16M色,真彩色);32(4096M色,增强型真彩色)。
然后,你得明白,在计算机中的最小的存储容量单位为Bit,即位的意思。
二、计算方法
①首先计算出该图片的大小为多少个Bit
拿例题一来计算,就等于:
A、像素总数为:1024x768=786432个像素
B、每个像素占32个Bit。
所以,该图片所占的总的Bit大小为:
1024x768x32=25165824Bit
②计算图片所占的磁盘存储空间
这就需要您对磁盘存储空间单位的换算有一定的掌握。使用总的Bit数转换成为相应的KB、MB、GB等,就可以计算出结果了。
1Byte=8bit 1Kb=1024B 1Mb=1024KB
好了,有了如上的基础,我们就可以计算出该图片的所占的存储空间的大小了。
1024x768x32 现在单位为Bit
1024x768x32 ÷8 现在单位为Byte
1024x768x32 ÷8 ÷1024=3072KB 现在单位为KB
1024x768x32 ÷8 ÷1024 ÷1024
=3MB 现在单位为MB
-------------------------------------------------------
这里可以看出图片加载到内存是很大的,所以我们要对图片进行处理
BitmapFactory.Options可以让我们控制如何将bitmap读入内存中
inSampleSize可以让我们缩放图片
inJustDecodeBounds设置为true,可以让我们不用解析图片就可以得到图片大小。返回的图片对象是null。我们可以得到图片的信息,但是不用为图片分配内存
Java代码
public class SizedCameraIntent extends Activity {
final static int CAMERA_RESULT = 0;
ImageView mImagevView;
String imageFilePath;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ch1);
imageFilePath = Environment.getExternalStorageDirectory().getAbsolutePath()
+"/myfavoritepicture.jpg";
File imageFile = new File(imageFilePath);
Uri imageFileUri = Uri.fromFile(imageFile);
// Uri imageFileUri = Uri.parse("file:///sdcard/myfavoritepicture.jpg");
Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
i.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, imageFileUri);
startActivityForResult(i, CAMERA_RESULT);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == RESULT_OK){
mImagevView = (ImageView)findViewById(R.id.returnedImageView);
Display currentDisplay = getWindowManager().getDefaultDisplay();
int dw = currentDisplay.getWidth();
int dh = currentDisplay.getHeight();
//得到图片大小但是不加载图片
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
Bitmap bmp = BitmapFactory.decodeFile(imageFilePath, options);
int heightRatio = (int)Math.ceil(options.outHeight/(float)dh);
int widthRatio = (int)Math.ceil(options.outWidth/(float)dw);
if(heightRatio > 1 && widthRatio > 1){
if(heightRatio > widthRatio){
options.inSampleSize = heightRatio;
}else{
options.inSampleSize = widthRatio;
}
}
//解析图片
options.inJustDecodeBounds = false;
bmp = BitmapFactory.decodeFile(imageFilePath, options);
mImagevView.setImageBitmap(bmp);
}
}
}
Java代码
String imageFilePath = Environment.getExternalStorageDirectory().getAbsolutePath()
+"/myfavoritepicture.jpg";
File imageFile = new File(imageFilePath);
Uri imageFileUri = Uri.fromFile(imageFile);
// Uri imageFileUri = Uri.parse("file:///sdcard/myfavoritepicture.jpg");
Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
i.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, imageFileUri);
startActivityForResult(i, CAMERA_RESULT);
String imageFilePath = Environment.getExternalStorageDirectory().getAbsolutePath() +"/myfavoritepicture.jpg"; File imageFile = new File(imageFilePath); Uri imageFileUri = Uri.fromFile(imageFile); // Uri imageFileUri = Uri.parse("file:///sdcard/myfavoritepicture.jpg"); Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); i.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, imageFileUri); startActivityForResult(i, CAMERA_RESULT);
对于大的图片,android加载的时候很有可能出现OOM(out of memory)。这个时候我们需要对图片进行处理。
图片加载到内存所占空间
-------------------------------------------------------------------------------------------
一张分辨率为1024×768,32位色彩的图像,其文件大小约为?
一、基础知识的掌握
首先我们必须明白,图片的每个像素所占的位数。
每个像素的位数,大体有如下几类。
1位,(单色);4位:(16色);8位(256色);
16(64K色,高彩色);24(16M色,真彩色);32(4096M色,增强型真彩色)。
然后,你得明白,在计算机中的最小的存储容量单位为Bit,即位的意思。
二、计算方法
①首先计算出该图片的大小为多少个Bit
拿例题一来计算,就等于:
A、像素总数为:1024x768=786432个像素
B、每个像素占32个Bit。
所以,该图片所占的总的Bit大小为:
1024x768x32=25165824Bit
②计算图片所占的磁盘存储空间
这就需要您对磁盘存储空间单位的换算有一定的掌握。使用总的Bit数转换成为相应的KB、MB、GB等,就可以计算出结果了。
1Byte=8bit 1Kb=1024B 1Mb=1024KB
好了,有了如上的基础,我们就可以计算出该图片的所占的存储空间的大小了。
1024x768x32 现在单位为Bit
1024x768x32 ÷8 现在单位为Byte
1024x768x32 ÷8 ÷1024=3072KB 现在单位为KB
1024x768x32 ÷8 ÷1024 ÷1024
=3MB 现在单位为MB
-------------------------------------------------------
这里可以看出图片加载到内存是很大的,所以我们要对图片进行处理
BitmapFactory.Options可以让我们控制如何将bitmap读入内存中
inSampleSize可以让我们缩放图片
inJustDecodeBounds设置为true,可以让我们不用解析图片就可以得到图片大小。返回的图片对象是null。我们可以得到图片的信息,但是不用为图片分配内存
Java代码
public class SizedCameraIntent extends Activity {
final static int CAMERA_RESULT = 0;
ImageView mImagevView;
String imageFilePath;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ch1);
imageFilePath = Environment.getExternalStorageDirectory().getAbsolutePath()
+"/myfavoritepicture.jpg";
File imageFile = new File(imageFilePath);
Uri imageFileUri = Uri.fromFile(imageFile);
// Uri imageFileUri = Uri.parse("file:///sdcard/myfavoritepicture.jpg");
Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
i.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, imageFileUri);
startActivityForResult(i, CAMERA_RESULT);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == RESULT_OK){
mImagevView = (ImageView)findViewById(R.id.returnedImageView);
Display currentDisplay = getWindowManager().getDefaultDisplay();
int dw = currentDisplay.getWidth();
int dh = currentDisplay.getHeight();
//得到图片大小但是不加载图片
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
Bitmap bmp = BitmapFactory.decodeFile(imageFilePath, options);
int heightRatio = (int)Math.ceil(options.outHeight/(float)dh);
int widthRatio = (int)Math.ceil(options.outWidth/(float)dw);
if(heightRatio > 1 && widthRatio > 1){
if(heightRatio > widthRatio){
options.inSampleSize = heightRatio;
}else{
options.inSampleSize = widthRatio;
}
}
//解析图片
options.inJustDecodeBounds = false;
bmp = BitmapFactory.decodeFile(imageFilePath, options);
mImagevView.setImageBitmap(bmp);
}
}
}
相关文章推荐
- android处理图片方法
- Android拍照获得图片URI为空的处理方法
- Android 图片缓存处理
- Android开发之图片处理专题(一):利用软引用构建图片高速缓存
- Android 图片特效处理的方法实例
- Android图片处理(Matrix,ColorMatrix)
- android图片特效处理之锐化效果
- Android对图片的处理(Bitmap)
- Android拍照及图片裁剪、调用系统相册(兼容6.0以上权限处理及7.0以上文件管理)
- android中的图片处理(三)
- android图片处理方法(不断收集中)
- Android 图片高斯模糊处理
- Android图片处理(Matrix,ColorMatrix)
- Android opencv 图片处理
- Android的TextView使用Html来处理图片显示、字体样式、超链接等
- Android处理图片
- android图片处理
- Android BitmapFactory图片压缩处理(大位图二次采样压缩处理)
- android 图片处理收集
- Android图片处理(Matrix,ColorMatrix)