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 }
  • 相关阅读:
    高精度入门(减法、加法、乘法)之 CODE[VS] 3115、3116、3117
    DP经典 之 CODE[VS] 1576 最长严格上升子序列 (O(n^2) 和 O(nlogn))
    CODE[VS] 1098 均分纸牌 ( 2002年NOIP全国联赛提高组)
    C++ string 与 int 等类型 的相互转换
    组合数学 + 大数乘法 + 大数除法 之 hdu 1261 字串数
    自然语言理解 之 统计词频
    Leetcode_10【正则表达式匹配】
    01——字符串反转
    Leetcode_09【回文数】
    Leetcode_07【整数反转】
  • 原文地址:https://www.cnblogs.com/summers/p/4096776.html
Copyright © 2011-2022 走看看