`
liliang1222
  • 浏览: 158600 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

pro.Android Media--处理大的图片

 
阅读更多

调用照相机程序,可以在intent中加入android.provider.MediaStore.EXTRA_OUTPUT 参数来设置图片保存位置。如下:

 

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。我们可以得到图片的信息,但是不用为图片分配内存

 

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);
			
		}
	}
}
分享到:
评论

相关推荐

    Pro.Android.Media--Android多媒体开发白皮书

    根据给定的信息,“Pro.Android.Media--Android多媒体开发白皮书”是一本专注于Android平台上多媒体应用开发的专业书籍。本书由Shawn VanEvery编写,详细介绍了如何使用Android多媒体API创建动态移动应用,包括图形...

    android 开发书籍 Apress.Pro.Android.Media.Dec.2010

    根据给定的文件信息,以下是对Android开发书籍“Apress.Pro.Android.Media.Dec.2010”的知识点详细说明: 1. 书籍标题与内容概述: 本书的标题“Apress.Pro.Android.Media.Dec.2010”指明了这是一本关于Android媒体...

    [android.开发书籍].Apress.Pro.Android.Media.Dec.2010

    《Pro Android Media》是Apress出版社于2010年12月出版的一本专业Android开发书籍,专门针对Android平台的多媒体开发进行深入探讨。这本书是Android开发者在处理音频、视频、图像以及动画等多媒体元素时的重要参考...

    Apress.Pro.Android.Media.Dec.2010

    《Pro Android Media: Developing Graphics, Music, Video, and Rich Media Apps for Smartphones and Tablets》是Android开发者必备的一本书籍,由Shawn VanEvery撰写,详细介绍了如何利用Android媒体APIs来创建...

    70:视频多媒体格式转换MediaCoder 0.8.63 Pro x86 x64视频转码和编码解码的多媒体 软件.rar

    MediaCoder是一款强大的多媒体格式转换工具,它支持各种类型的视频、音频和图片格式,为用户提供了一站式的解决方案,方便用户在不同设备和平台之间共享多媒体内容。这款软件的主要功能包括视频转码、音频编码和解码...

    Pro Android学习:media frameworks小例子

    在Android开发中,Media Frameworks是一个至关重要的组件,它提供了处理多媒体数据(如音频、视频和图像)的能力。本篇文章将深入探讨`Media Frameworks`的相关知识点,通过一个实际的小例子来帮助理解其工作原理和...

    bugreport-2024-05-27-181746.zip

    9. **com.miui.mediaeditor-appLog**:媒体编辑器应用的日志,与图片、视频编辑过程中的错误有关。 10. **com.android.updater-appLog**:Android更新程序的日志,可能记录了系统更新失败、更新过程中出现的错误等...

    bugreport-2024-06-15-083728.zip

    8. "com.miui.mediaeditor-appLog": 媒体编辑器应用日志,如果用户在编辑图片或视频时遇到问题,这部分日志会提供线索。 9. "com.android.updater-appLog": Android更新程序日志,可能与系统更新或安装更新失败有关...

    Qt调用Jni接口获取Android相册图片列表

    你需要包含Android平台的Qt库,并在项目.pro文件中添加`QT += androidextras`。同时,为Android项目添加一个本地库模块,这将在Android.mk或CMakeLists.txt文件中完成。 2. **创建JNI接口** 在Java层,创建一个新...

    Android系统中各类文件夹名称(SD卡)

    8. .nomedia:隐藏的音频、图片文件夹,用于自定义相关文件夹的显示。 9. media:电话通话录音或在线视频等媒体产生的音频文件记录存放位置。 10. .medieval_software:使用蓝牙传输软件时的记录任务保存文件目录...

    SD卡中常见的文件夹名称及其作用.docx

    8. `.nomedia`:隐藏的音频和图片文件夹。 9. `media`:通话录音和在线媒体的音频记录。 10. `.medieval_software`:蓝牙传输软件的临时文件。 11. `extracted`:解压缩软件的解压目标目录。 第三方应用类文件夹: ...

Global site tag (gtag.js) - Google Analytics