Bitmap表示位图,它将图像定义为由点(像素)组成,每个点可以由多种色彩表示,包括2、4、8、16、24和32位色彩。例如,一幅1024×768分辨率的32位真彩图片,其所占存储字节数为:1024×768×32/8=3072KB,如果是4K的图片,解码时占用内存的大小可想而知。在android系统当中,bitmap是图像处理最重要的类之一。用它可以获取图像文件信息,进行图像剪切、旋转、缩放等操作,并可以指定格式保存图像文件。
Android中的BitmapFactory类提供了常用解码图片得到bitmap的方法包括:
1.通过路径解码本地图片:
BitmapFactory.decodeFile(String pathName);
BitmapFactory.decodeFile(String pathName, Options opts);
2.解码app中的resource资源
BitmapFactory.decodeResource(Resources res, int id)
BitmapFactory.decodeResource(Resources res, int id, Options opts);
BitmapFactory.decodeResourceStream(Resources res, TypedValue value,
InputStream is, Rect pad, Options opts)
3.从字节中解码,可以用于解码网络下载的图片数据
BitmapFactory.decodeByteArray(byte[] data, int offset, int length);
BitmapFactory.decodeByteArray(byte[] data, int offset, int length, Options opts);
4.解码数据流
BitmapFactory.decodeStream(InputStream is);
BitmapFactory.decodeStream(InputStream is, Rect outPadding, Options opts);
5.通过文件描述符FD(file descriptor)解码图片文件
BitmapFactory.decodeFileDescriptor(FileDescriptor fd);
BitmapFactory.decodeFileDescriptor(FileDescriptor fd, Rect outPadding, Options opts);
相对来说,1-4都是常用的方法,5比较不常用,下面是常用的解码代码:
1.Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/test.png");
2.FileInputStream fis = new FileInputStream("/sdcard/test.png");
Bitmap bitmap = BitmapFactory.decodeStream(fis);
3.Bitmap bitmap =BitmapFactory.decodeResource(this.getContext().getResources(), R.drawable.test);