zoukankan      html  css  js  c++  java
  • Android学习之位图BitMap

           BitMap代表一张位图,扩展名可以是.bmp或者.dib。位图是Windows标准格式图形文件,它将图像定义为由点(像素)组成,每个点可以由多种色彩表示,包括2、4、8、16、24和32位色彩。例如,一幅1024×768分辨率的32位真彩图片,其所占存储字节数为:1024×768×32/8=3072KB
    位图文件图像效果好,但是非压缩格式的,需要占用较大存储空间,不利于在网络上传送。jpg格式则恰好弥补了位图文件这个缺点。

    在android系统当中,bitmap是图像处理最重要的类之一。用它可以获取图像文件信息,进行图像剪切、旋转、缩放等操作,并可以指定格式保存图像文件。
    下面主要介绍BitMap的用法:

    1.从资源文件中获取

    1 Bitmap rawBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.img1);  

    2.从SD卡中得到图片

    1 (方法1) 
    2 String SDCarePath=Environment.getExternalStorageDirectory().toString(); 
    3 String filePath=SDCarePath+"/"+"haha.jpg"; 
    4 Bitmap rawBitmap1 = BitmapFactory.decodeFile(filePath, null); 
    5 (方法2)
    6 InputStream inputStream=getBitmapInputStreamFromSDCard("haha.jpg"); 
    7 Bitmap rawBitmap2 = BitmapFactory.decodeStream(inputStream); 

    3.设置图片的圆角,返回设置后的BitMap

     1     public Bitmap toRoundCorner(Bitmap bitmap, int pixels) {
     2         Bitmap roundCornerBitmap = Bitmap.createBitmap(bitmap.getWidth(),
     3                 bitmap.getHeight(), Config.ARGB_8888);
     4         Canvas canvas = new Canvas(roundCornerBitmap);
     5         int color = 0xff424242;// int color = 0xff424242;
     6         Paint paint = new Paint();
     7         paint.setColor(color);
     8         // 防止锯齿
     9         paint.setAntiAlias(true);
    10         Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
    11         RectF rectF = new RectF(rect);
    12         float roundPx = pixels;
    13         // 相当于清屏
    14         canvas.drawARGB(0, 0, 0, 0);
    15         // 先画了一个带圆角的矩形
    16         canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
    17         paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
    18         // 再把原来的bitmap画到现在的bitmap!!!注意这个理解
    19         canvas.drawBitmap(bitmap, rect, rect, paint);
    20         return roundCornerBitmap;
    21     }

    4.将图片高宽和的大小kB压缩

     1         //得到图片原始的高宽
     2         int rawHeight = rawBitmap.getHeight();
     3         int rawWidth = rawBitmap.getWidth();
     4         // 设定图片新的高宽
     5         int newHeight = 500;
     6         int newWidth = 500;
     7         // 计算缩放因子
     8         float heightScale = ((float) newHeight) / rawHeight;
     9         float widthScale = ((float) newWidth) / rawWidth;
    10         // 新建立矩阵
    11         Matrix matrix = new Matrix();
    12         matrix.postScale(heightScale, widthScale);
    13         // 设置图片的旋转角度
    14         // matrix.postRotate(-30);
    15         // 设置图片的倾斜
    16         // matrix.postSkew(0.1f, 0.1f);
    17         // 将图片大小压缩
    18         // 压缩后图片的宽和高以及kB大小均会变化
    19         Bitmap newBitmap = Bitmap.createBitmap(rawBitmap, 0, 0, rawWidth,
    20                 rawWidth, matrix, true);

    5.将Bitmap转换为Drawable   Drawable转Bitmap

    1         Drawable newBitmapDrawable = new BitmapDrawable(Bitmap);
    2         //如果要获取BitMapDrawable中所包装的BitMap对象,可以用getBitMap()方法;
    3         Bitmap  bitmap = newBitmapDrawable.getBitmap();

    6.由于前面创建的Bitmap所占用的内存还没有回收,而导致引发OutOfMemory错误,所以用下面方法判断是否回收。

    1      if(!bitmap.isRecycled())
    2     {
    3        bitmap.recycle()
    4 }
  • 相关阅读:
    自然语言交流系统 phxnet团队 创新实训 项目博客 (十一)
    install ubuntu on Android mobile phone
    Mac OS, Mac OSX 与Darwin
    About darwin OS
    自然语言交流系统 phxnet团队 创新实训 项目博客 (十)
    Linux下编译安装qemu和libvirt
    libvirt(virsh命令总结)
    深入浅出 kvm qemu libvirt
    自然语言交流系统 phxnet团队 创新实训 项目博客 (九)
    自然语言交流系统 phxnet团队 创新实训 项目博客 (八)
  • 原文地址:https://www.cnblogs.com/summers/p/4096776.html
Copyright © 2011-2022 走看看