private void data2file(byte[] w, String fileName) throws Exception {
FileOutputStream out = null;
try {
out = new FileOutputStream(fileName);
Bitmap bitmap = BitmapFactorydecodeByteArray(w, 0, wlength);
Matrix matrix=new Matrix();
matrixpostScale(1f, 1f);
//旋转
int deg = thisgetWindowManager()getDefaultDisplay()getRotation();
if (deg == SurfaceROTATION_270) {
degree = 180;
matrixpostRotate(degree);
}
Bitmap dstbmp=BitmapcreateBitmap(bitmap,0,0,bitmapgetWidth(),
bitmapgetHeight(),matrix,true);
dstbmpcompress(CompressFormatJPEG, 100, out);
//outwrite(w);
outflush();
outclose();
dstbmprecycle();
bitmaprecycle();
} catch (Exception e) {
if (out != null)
outclose();
throw e;
}
}
生成地址后可以做这样处理,先旋转到合适的角度,再保存。
一、ImageView的setImageBitmap()是设置imageView组件的显示。它的定义和源码如下:
1、在源代码中输入:if this is used frequently,may handle bitmaps explicitly // to reduce the intermedite drawable abject;
2、它实际上是对setImageDrawable接口的封装,支持直接略过Bitmap对象进行组件的设置。需要指出的是这个方法设置时,进行大的处理时,注意对的缩放,否则会内存溢出。
扩展资料:
一、Bitmap设置代码:
1、ImageView的setImageBitmap()是设置imageView组件的显示,实际上是setImageDrawable接口的封装,支持直接略过Bitmap对象进行组件的设置。
2、需要指出的是这个方法设置时,进行大的处理时,注意对的缩放,否则会内存溢出。if this is used frequently,may handle bitmaps explicitly // to reduce the intermedite drawable abject;
二、根据位深度,可将位图分为1、4、8、16、24及32位图像等。每个像素使用的信息位数越多,可用的颜色就越多,颜色表现就越逼真,相应的数据量越大。例如,位深度为 1 的像素位图只有两个可能的值(黑色和白色)。
1、所以又称为二值位图。位深度为 8 的图像有 2^8(即 256)个可能的值。位深度为 8 的灰度模式图像有 256 个可能的灰色值。
2、RGB图像由三个颜色通道组成。8 位/通道的 RGB 图像中的每个通道有 256 个可能的值,这意味着该图像有 1600 万个以上可能的颜色值。
3、有时将带有 8 位/通道 (bpc) 的 RGB 图像称作 24 位图像(8 位 x 3 通道 = 24 位数据/像素)。通常将使用24位RGB组合数据位表示的的位图称为真彩色位图。
4、BMP文件是微软公司所开发的一种交换和存储数据的方法,各个版本的Windows都支持BMP格式的文件。Windows提供了快速、方便的存储和压缩BMP文件的方法。BMP格式的缺点是,要占用较大的存储空间,文件尺寸太大。
参考资料来源:百度百科-博士能IMAGEVIEW 15-45X50(78-7348)
参考资料来源:百度百科-Bitmap
在onActivityResult函数你忘记了这句 superonActivityResult(requestCode, resultCode, data);
附上我的代码(和你的相对应的),你相对应地方如果有问题就对照吧
Intent i = new Intent(
"androidmediaactionIMAGE_CAPTURE");
startActivityForResult(i,
ActivityDEFAULT_KEYS_DIALER);
//第二个函数
superonActivityResult(requestCode, resultCode, data);
ivPic = (ImageView) findViewById(RidivPic);
if (useCamera) {
if (resultCode == RESULT_OK) {
Bundle extras = datagetExtras();
myBitmap = (Bitmap) extrasget("data");
ivPicsetImageBitmap(myBitmap);
hasPic = true;
ivPicsetVisibility(ViewVISIBLE);
}
}
参考:
Android Bitmap 详解:关于 Bitamp 你所要知道的一切
Android Bitmap(位图)详解
是由大量且有限个数的像素点组成。把一张通过bitmap的方式创建到内存中,实际上就是在内存中创建了一个叫做Bitmap的对象,然后把 所有像素 解码后的数据存放在Bitmap对象里面,Bitmap就拥有了的宽高,透明度,颜色值等数据。所以Bitmap的创建是通过BitmapFactorydecodeXxx()。
Config是Bitmap类中的枚举类。像素由ARGB四个颜色通道组成。Config描述位图中像素的存储方式。 这里的存储方式,无非就是对颜色通道和用多大的容器(bit)来存储的排列组合。所以config会影响透明度,占用内存大小,保存成文件的大小,质量。
Config的字母表示该配置存储的像素的颜色通道,数字表示对应通道的数据用多少位来存储。
ALPHA_8:表示只存储alpha通道,使用8bit(1字节)的内存(容器)来存储一个像素。
RGB_565:表示存储RGB三个通道,分别使用5bit,6bit,5bit的内存(容器)来存储一个像素。
ARGB_4444:表示存储ARGB四个通道,每个通道都是以4bit的内存(容器)来存储一个像素。
ARGB_8888:表示存储ARGB四个通道,每个通道都是以8bit的内存(容器)来存储一个像素。
所以,ARGB_8888配置占用内存最大,质量最高。
压缩的一个思路就是降低的配置。
总内存 = 宽的像素数 × 高的像素数 × 每个像素点占用的大小
注:
1 byte = 8 bit
1 KB = 1024 byte
以上就是关于Android开发 camera拍照无法获取Exit信息全部的内容,包括:Android开发 camera拍照无法获取Exit信息、android: ImageView的setImageBitmap()方法、android调用系统摄像头拍照并显示图片的问题,请高手看下程序哪里错了,执行 myimage.setImageBitmap异常等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)