# 概述

图片格式概述:

        BMP:高质量绘图 保证原图质量,用于相机等

BMP格式图片是有一个一个的像素点组成,每一个像素都是一个颜色.而每一个像素显示的颜色用的二进制位也不相同,这个像素位称之为位深,位深越大,表示每一个像素点所用的二进制位越多,显示的图像也就越清晰。 png:较高质量绘图 体积小,适用于网络传输 png图片是将bmp图片进行压缩,其压缩格式类似于rar压缩——将相同的byte信息合并表示。png图片可以还原,是无损的压缩方式。 jpg:良好的绘图质量 体积小,便于传输 jpg格式图片也是对bmp图片进行压缩,因为眼睛的精度是有限的,jpg利用这一点将很多颜色相近的用同一颜色标识,而对于一大块相同的颜色,则用一个值表示。jpg格式图片不能被还原。

        ## 加载大图
      

      
      <div class="top-box hide">
        <div class="alert-info">
        </div>
      </div>
      
      ```

hr && wr>1){ r = wr; } if(hr>wr && hr>1){ r = hr; } //压缩图片 options.inSampleSize = r;//设置压缩比 options.inJustDecodeBounds = false;//设置加载图片内容 Bitmap bm = BitmapFactory.decodeFile(path,options); iv.setImageBitmap(bm); " data-snippet-id=“ext.f5fc8efb9581248b791731039403eb80” data-snippet-saved=“false” data-codota-status=“done”>`ImageView iv = (ImageView) findViewById(R.id.iv); <span class=“hljs-comment”>/**

  • 在Android中,每一个应用程序所占用的内存空间大小都会有一个固定的大小限制
  • 假设此处加载的图片是2560*1440像素,图片位深是24的jpg格式图像
  • 虽然此图占用的磁盘空间是1.3M,但图片在加载到内存中时,实际上会先转换成位图图像
  • 那么这张图片加载到内存中的大小就是2560144032(位深24,windows系统中,使用24位字节表示一个颜色值:#000000,
  • 但在Android中,每一个颜色值是用32位字节表示一个颜色值:#00000000),因此,这张图片加载到内存中所需要占用的内存
  • 大小约为:14M,因此,占用内存是极大的.若是直接将图片加载到内存中,容易造成内存溢出
  • 解决方案:按比例压缩图片 *按比例压缩图片首先就是要获取图片的大小
  • */</span> String path = <span class=“hljs-string”>“mnt/sdcard/1.jpg”</span>; <span class=“hljs-comment”>//用于设置图片渲染器参数</span>

BitmapFactory.Options options = <span class=“hljs-keyword”>new</span> Options(); <span class=“hljs-comment”>//设置图片加载属性:不加载图片内容,只获取图片信息</span> options.inJustDecodeBounds = <span class=“hljs-literal”>true</span>; <span class=“hljs-comment”>//加载图片信息</span> BitmapFactory.decodeFile(path,options); <span class=“hljs-comment”>//获取图片宽高</span> <span class=“hljs-keyword”>int</span> picwidth = options.outWidth; <span class=“hljs-keyword”>int</span> picheight = options.outHeight; <span class=“hljs-comment”>//获取屏幕大小</span> <span class=“hljs-comment”>//获取窗口管理器</span> WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
<span class=“hljs-comment”>//获取默认显示设备</span> Display dis =wm.getDefaultDisplay(); <span class=“hljs-comment”>//获取屏幕宽高</span> <span class=“hljs-comment”>//dis.getSize(outSize);此方法适用于新版本Android系统</span> <span class=“hljs-keyword”>int</span> diswidth = dis.getWidth(); <span class=“hljs-keyword”>int</span> disheight = dis.getHeight(); <span class=“hljs-comment”>//计算压缩比</span> <span class=“hljs-keyword”>int</span> wr = picwidth/diswidth; <span class=“hljs-keyword”>int</span> hr = picheight/disheight; <span class=“hljs-keyword”>int</span> r = <span class=“hljs-number”>1</span>; <span class=“hljs-keyword”>if</span>(wr>hr && wr><span class=“hljs-number”>1</span>){ r = wr; } <span class=“hljs-keyword”>if</span>(hr>wr && hr><span class=“hljs-number”>1</span>){ r = hr; } <span class=“hljs-comment”>//压缩图片</span> options.inSampleSize = r;<span class=“hljs-comment”>//设置压缩比</span> options.inJustDecodeBounds = <span class=“hljs-literal”>false</span>;<span class=“hljs-comment”>//设置加载图片内容</span> Bitmap bm = BitmapFactory.decodeFile(path,options); iv.setImageBitmap(bm); `

          
          

            ## 复制图像
          

          
          <div class="top-box hide">
            <div class="alert-info">
            </div>
          </div>
          
          ```
`ImageView iv = (ImageView) findViewById(R.id.iv);
&lt;span class="hljs-comment">/**
 *  复制图片:作用
 *  在Android中,直接从资源文件加载到的图片是不能进行操作的,只能进行显示
 *  想要进行操作,可以复制一张图片到内存,然后操作复制到的图片
 * */&lt;/span>
&lt;span class="hljs-comment">//加载原图&lt;/span>
Bitmap bitmap = BitmapFactory.decodeFile(&lt;span class="hljs-string">"/mnt/sdcard/1.jpg"&lt;/span>);
&lt;span class="hljs-comment">//搞一个一样大小一样样式的复制图&lt;/span>
Bitmap copybm = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), bitmap.getConfig());
&lt;span class="hljs-comment">//获取复制图的画布&lt;/span>
Canvas canvas = &lt;span class="hljs-keyword">new&lt;/span> Canvas(copybm);
&lt;span class="hljs-comment">//获取一个画笔,设置颜色&lt;/span>
Paint paint = &lt;span class="hljs-keyword">new&lt;/span> Paint();
paint.setColor(Color.RED);
&lt;span class="hljs-comment">//向画布绘制,绘制原图内容&lt;/span>
canvas.drawBitmap(bitmap, &lt;span class="hljs-keyword">new&lt;/span> Matrix(), paint);
&lt;span class="hljs-comment">//canvas.drawPoint(10, 10, paint); 向指定位置画一个点&lt;/span>
iv.setImageBitmap(copybm);
`
        ## 图片旋转
      

      
      <div class="top-box hide">
        <div class="alert-info">
        </div>
      </div>
      
      ```

`ImageView iv = (ImageView) findViewById(R.id.iv); <span class=“hljs-comment”>/**

  • 图片旋转:
    

*Android中原图是不能进行操作的,必须要先复制一张图到内存,然后再操作 *旋转是在绘制过程中进行的

  • /</span> <span class=“hljs-comment”>//加载原图</span> Bitmap bitmap = BitmapFactory.decodeFile(<span class=“hljs-string”>"/mnt/sdcard/1.jpg"</span>); <span class=“hljs-comment”>//搞一个一样大小一样样式的复制图</span> Bitmap copybm = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), bitmap.getConfig()); <span class=“hljs-comment”>//获取复制图的画布</span> Canvas canvas = <span class=“hljs-keyword”>new</span> Canvas(copybm); <span class=“hljs-comment”>//获取一个画笔,设置颜色</span> Paint paint = <span class=“hljs-keyword”>new</span> Paint(); paint.setColor(Color.RED); <span class=“hljs-comment”>//设置图片绘制角度——设置矩阵</span> Matrix matrix = <span class=“hljs-keyword”>new</span> Matrix(); <span class=“hljs-comment”>/*
    matrix.setValues(new float[]{//这是矩阵的默认值 1.5f,0,0, 0,1,0, 0,0,1 }); 而旋转其实是将每个点坐标和sinx cosx进行计算… */</span> <span class=“hljs-comment”>//安卓提供了便捷方法</span> matrix.setRotate(<span class=“hljs-number”>30</span>,bitmap.getWidth()/<span class=“hljs-number”>2</span>,bitmap.getHeight()/<span class=“hljs-number”>2</span>); <span class=“hljs-comment”>//向画布绘制,绘制原图内容</span> canvas.drawBitmap(bitmap, matrix, paint); <span class=“hljs-comment”>//canvas.drawPoint(10, 10, paint); 向指定位置画一个点</span> iv.setImageBitmap(copybm); `
          
          

            ## 改变图片大小和位置
          

          
          <div class="top-box hide">
            <div class="alert-info">
            </div>
          </div>
          
          ```
`ImageView iv = (ImageView) findViewById(R.id.iv);
&lt;span class="hljs-comment">//加载原图&lt;/span>
Bitmap bitmap = BitmapFactory.decodeFile(&lt;span class="hljs-string">"/mnt/sdcard/1.jpg"&lt;/span>);
&lt;span class="hljs-comment">//搞一个一样大小一样样式的复制图&lt;/span>
Bitmap copybm = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), bitmap.getConfig());
&lt;span class="hljs-comment">//获取复制图的画布&lt;/span>
Canvas canvas = &lt;span class="hljs-keyword">new&lt;/span> Canvas(copybm);
&lt;span class="hljs-comment">//获取一个画笔,设置颜色&lt;/span>
Paint paint = &lt;span class="hljs-keyword">new&lt;/span> Paint();
paint.setColor(Color.RED);
&lt;span class="hljs-comment">//设置图片绘制角度——设置矩阵&lt;/span>
Matrix matrix = &lt;span class="hljs-keyword">new&lt;/span> Matrix();         
matrix.setValues(&lt;span class="hljs-keyword">new&lt;/span> &lt;span class="hljs-keyword">float&lt;/span>[]{&lt;span class="hljs-comment">//这是矩阵的默认值&lt;/span>
&lt;span class="hljs-number">1&lt;/span>,&lt;span class="hljs-number">0&lt;/span>,&lt;span class="hljs-number">0&lt;/span>,
&lt;span class="hljs-number">0&lt;/span>,&lt;span class="hljs-number">1&lt;/span>,&lt;span class="hljs-number">0&lt;/span>,
&lt;span class="hljs-number">0&lt;/span>,&lt;span class="hljs-number">0&lt;/span>,&lt;span class="hljs-number">1&lt;/span>
});
&lt;span class="hljs-comment">/**
位置矩阵计算公式(以默认值为例,计算x、y、z轴的值):
x = 1x+0y+0z;
y = 0x+1y+0z;
z = 0x+0y+1z;
通过改变矩阵值可以修改图片
//图像的缩放也可以使用Android中自带的方法进行设置
matrix.setScale(0.5f, 0.5f);
    */&lt;/span>
&lt;span class="hljs-comment">//向画布绘制,绘制原图内容&lt;/span>
canvas.drawBitmap(bitmap, matrix, paint);
iv.setImageBitmap(copybm);
`
        ## 镜像
      

      
      <div class="top-box hide">
        <div class="alert-info">
        </div>
      </div>
      
      ```

Matrix matrix = &lt;span class="hljs-keyword">new&lt;/span> Matrix(); matrix.setValues(&lt;span class="hljs-keyword">new&lt;/span> &lt;span class="hljs-keyword">float&lt;/span>[]{&lt;span class="hljs-comment">//这是矩阵的默认值&lt;/span> &lt;span class="hljs-number">-1&lt;/span>,&lt;span class="hljs-number">0&lt;/span>,&lt;span class="hljs-number">0&lt;/span>, &lt;span class="hljs-number">0&lt;/span>,&lt;span class="hljs-number">1&lt;/span>,&lt;span class="hljs-number">0&lt;/span>, &lt;span class="hljs-number">0&lt;/span>,&lt;span class="hljs-number">0&lt;/span>,&lt;span class="hljs-number">1&lt;/span> }); &lt;span class="hljs-comment">//镜像完还要平移回来&lt;/span> matrix.postTranslate(bitmap.getWidth(), &lt;span class="hljs-number">0&lt;/span>); &lt;span class="hljs-comment">//向画布绘制,绘制原图内容&lt;/span> canvas.drawBitmap(bitmap, matrix, paint);

          
          

            ## 倒影
          

          
          <div class="top-box hide">
            <div class="alert-info">
            </div>
          </div>
          
          ```
`Matrix matrix = &lt;span class="hljs-keyword">new&lt;/span> Matrix();         
matrix.setValues(&lt;span class="hljs-keyword">new&lt;/span> &lt;span class="hljs-keyword">float&lt;/span>[]{&lt;span class="hljs-comment">//这是矩阵的默认值&lt;/span>
&lt;span class="hljs-number">1&lt;/span>,&lt;span class="hljs-number">0&lt;/span>,&lt;span class="hljs-number">0&lt;/span>,
&lt;span class="hljs-number">0&lt;/span>,&lt;span class="hljs-number">-1&lt;/span>,&lt;span class="hljs-number">0&lt;/span>,
&lt;span class="hljs-number">0&lt;/span>,&lt;span class="hljs-number">0&lt;/span>,&lt;span class="hljs-number">1&lt;/span>
});
&lt;span class="hljs-comment">//镜像完还要平移回来&lt;/span>
matrix.postTranslate(&lt;span class="hljs-number">0&lt;/span>, bitmap.getHeight());
&lt;span class="hljs-comment">//向画布绘制,绘制原图内容&lt;/span>
canvas.drawBitmap(bitmap, matrix, paint);
iv.setImageBitmap(copybm);
`
        ## 颜色处理
      

      
      <div class="top-box hide">
        <div class="alert-info">
        </div>
      </div>
      
      ```

&lt;span class="hljs-comment">//加载原图&lt;/span> Bitmap bitmap = BitmapFactory.decodeFile(&lt;span class="hljs-string">"/mnt/sdcard/1.jpg"&lt;/span>); &lt;span class="hljs-comment">//搞一个一样大小一样样式的复制图&lt;/span> Bitmap copybm = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), bitmap.getConfig()); &lt;span class="hljs-comment">//获取复制图的画布&lt;/span> Canvas canvas = &lt;span class="hljs-keyword">new&lt;/span> Canvas(copybm); &lt;span class="hljs-comment">//获取一个画笔,设置颜色&lt;/span> Paint paint = &lt;span class="hljs-keyword">new&lt;/span> Paint(); paint.setColor(Color.RED); ColorMatrix cm = &lt;span class="hljs-keyword">new&lt;/span> ColorMatrix(); cm.&lt;span class="hljs-built_in">set&lt;/span>(&lt;span class="hljs-comment">//默认颜色矩阵,通过修改rgba来对图片颜色进行处理&lt;/span> &lt;span class="hljs-keyword">new&lt;/span> &lt;span class="hljs-keyword">float&lt;/span>[]{ &lt;span class="hljs-number">1&lt;/span>,&lt;span class="hljs-number">0&lt;/span>,&lt;span class="hljs-number">0&lt;/span>,&lt;span class="hljs-number">0&lt;/span>,&lt;span class="hljs-number">0&lt;/span>, &lt;span class="hljs-number">0&lt;/span>,&lt;span class="hljs-number">1&lt;/span>,&lt;span class="hljs-number">0&lt;/span>,&lt;span class="hljs-number">0&lt;/span>,&lt;span class="hljs-number">0&lt;/span>, &lt;span class="hljs-number">0&lt;/span>,&lt;span class="hljs-number">0&lt;/span>,&lt;span class="hljs-number">1&lt;/span>,&lt;span class="hljs-number">0&lt;/span>,&lt;span class="hljs-number">0&lt;/span>, &lt;span class="hljs-number">0&lt;/span>,&lt;span class="hljs-number">0&lt;/span>,&lt;span class="hljs-number">0&lt;/span>,&lt;span class="hljs-number">1&lt;/span>,&lt;span class="hljs-number">0&lt;/span>, } ); &lt;span class="hljs-comment">/* 颜色矩阵计算公式: red = 1*128 + 0*128 + 0*128 + 0*0 +0 blue = 0*128 + 1*128 + 0*128 + 0*0 +0 green = 0*128 + 0*128 + 1*128 + 0*0 +0 alpha = 0*128 + 0*128 + 0*128 + 1*0 +0 透明度 */&lt;/span> paint.setColorFilter(&lt;span class="hljs-keyword">new&lt;/span> ColorMatrixColorFilter(cm)); canvas.drawBitmap(bitmap,&lt;span class="hljs-keyword">new&lt;/span> Matrix(), paint); iv.setImageBitmap(copybm);

          
          

            ## 圆角图
          

          
          <div class="top-box hide">
            <div class="alert-info">
            </div>
          </div>
          
          ```
`&lt;span class="hljs-function">&lt;span class="hljs-keyword">public&lt;/span> &lt;span class="hljs-keyword">static&lt;/span> Bitmap &lt;span class="hljs-title">getRoundedCornerBitmap&lt;/span>&lt;span class="hljs-params">(Bitmap bitmap, &lt;span class="hljs-keyword">float&lt;/span> roundPx)&lt;/span> &lt;/span>{

        Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
                bitmap.getHeight(), Config.ARGB_8888);
        Canvas canvas = &lt;span class="hljs-keyword">new&lt;/span> Canvas(output);

        &lt;span class="hljs-keyword">final&lt;/span> &lt;span class="hljs-keyword">int&lt;/span> color = &lt;span class="hljs-number">0xff424242&lt;/span>;
        &lt;span class="hljs-keyword">final&lt;/span> Paint paint = &lt;span class="hljs-keyword">new&lt;/span> Paint();
        &lt;span class="hljs-keyword">final&lt;/span> Rect rect = &lt;span class="hljs-keyword">new&lt;/span> Rect(&lt;span class="hljs-number">0&lt;/span>, &lt;span class="hljs-number">0&lt;/span>, bitmap.getWidth(), bitmap.getHeight());
        &lt;span class="hljs-keyword">final&lt;/span> RectF rectF = &lt;span class="hljs-keyword">new&lt;/span> RectF(rect);

        paint.setAntiAlias(&lt;span class="hljs-keyword">true&lt;/span>);
        canvas.drawARGB(&lt;span class="hljs-number">0&lt;/span>, &lt;span class="hljs-number">0&lt;/span>, &lt;span class="hljs-number">0&lt;/span>, &lt;span class="hljs-number">0&lt;/span>);
        paint.setColor(color);
        canvas.drawRoundRect(rectF, roundPx, roundPx, paint);

        paint.setXfermode(&lt;span class="hljs-keyword">new&lt;/span> PorterDuffXfermode(Mode.SRC_IN));
        canvas.drawBitmap(bitmap, rect, rect, paint);

        &lt;span class="hljs-keyword">return&lt;/span> output;
    }
`
        ## 图片添加倒影效果
      

      
      <div class="top-box hide">
        <div class="alert-info">
        </div>
      </div>
      
      ```

`<span class=“hljs-comment”>/** * 获得带倒影的图片方法 */</span> <span class=“hljs-function”><span class=“hljs-keyword”>public</span> <span class=“hljs-keyword”>static</span> Bitmap <span class=“hljs-title”>createReflectionImageWithOrigin</span><span class=“hljs-params”>(Bitmap bitmap)</span> </span>{ <span class=“hljs-keyword”>final</span> <span class=“hljs-keyword”>int</span> reflectionGap = <span class=“hljs-number”>4</span>; <span class=“hljs-keyword”>int</span> width = bitmap.getWidth(); <span class=“hljs-keyword”>int</span> height = bitmap.getHeight();

    Matrix matrix = &lt;span class="hljs-keyword">new&lt;/span> Matrix();
    matrix.preScale(&lt;span class="hljs-number">1&lt;/span>, -&lt;span class="hljs-number">1&lt;/span>);

    Bitmap reflectionImage = Bitmap.createBitmap(bitmap, &lt;span class="hljs-number">0&lt;/span>, height / &lt;span class="hljs-number">2&lt;/span>,
            width, height / &lt;span class="hljs-number">2&lt;/span>, matrix, &lt;span class="hljs-keyword">false&lt;/span>);

    Bitmap bitmapWithReflection = Bitmap.createBitmap(width,
            (height + height / &lt;span class="hljs-number">2&lt;/span>), Config.ARGB_8888);

    Canvas canvas = &lt;span class="hljs-keyword">new&lt;/span> Canvas(bitmapWithReflection);
    canvas.drawBitmap(bitmap, &lt;span class="hljs-number">0&lt;/span>, &lt;span class="hljs-number">0&lt;/span>, &lt;span class="hljs-keyword">null&lt;/span>);
    Paint deafalutPaint = &lt;span class="hljs-keyword">new&lt;/span> Paint();
    canvas.drawRect(&lt;span class="hljs-number">0&lt;/span>, height, width, height + reflectionGap, deafalutPaint);

    canvas.drawBitmap(reflectionImage, &lt;span class="hljs-number">0&lt;/span>, height + reflectionGap, &lt;span class="hljs-keyword">null&lt;/span>);

    Paint paint = &lt;span class="hljs-keyword">new&lt;/span> Paint();
    LinearGradient shader = &lt;span class="hljs-keyword">new&lt;/span> LinearGradient(&lt;span class="hljs-number">0&lt;/span>, bitmap.getHeight(), &lt;span class="hljs-number">0&lt;/span>,
            bitmapWithReflection.getHeight() + reflectionGap, &lt;span class="hljs-number">0x70ffffff&lt;/span>,
            &lt;span class="hljs-number">0x00ffffff&lt;/span>, TileMode.CLAMP);
    paint.setShader(shader);
    &lt;span class="hljs-comment">// Set the Transfer mode to be porter duff and destination in&lt;/span>
    paint.setXfermode(&lt;span class="hljs-keyword">new&lt;/span> PorterDuffXfermode(Mode.DST_IN));
    &lt;span class="hljs-comment">// Draw a rectangle using the paint with our linear gradient&lt;/span>
    canvas.drawRect(&lt;span class="hljs-number">0&lt;/span>, height, width, bitmapWithReflection.getHeight()
            + reflectionGap, paint);
    &lt;span class="hljs-keyword">return&lt;/span> bitmapWithReflection;
}

`

          
          

            ## 添加水印
          

          
          <div class="top-box hide">
            <div class="alert-info">
            </div>
          </div>
          
          ```
`  &lt;span class="hljs-comment">/**
     * create the bitmap from a byte array 生成水印图片
     * 
     * &lt;span class="hljs-doctag">@param&lt;/span> src
     *            要添加水印的图片
     * &lt;span class="hljs-doctag">@param&lt;/span> 水印
     * &lt;span class="hljs-doctag">@return&lt;/span> 添加了水印的图片
     */&lt;/span>
    &lt;span class="hljs-function">&lt;span class="hljs-keyword">private&lt;/span> Bitmap &lt;span class="hljs-title">createBitmap&lt;/span>&lt;span class="hljs-params">(Bitmap src, Bitmap watermark)&lt;/span> &lt;/span>{
        String tag = &lt;span class="hljs-string">"createBitmap"&lt;/span>;
        Log.d(tag, &lt;span class="hljs-string">"create a new bitmap"&lt;/span>);
        &lt;span class="hljs-keyword">if&lt;/span> (src == &lt;span class="hljs-keyword">null&lt;/span>) {
            &lt;span class="hljs-keyword">return&lt;/span> &lt;span class="hljs-keyword">null&lt;/span>;
        }

        &lt;span class="hljs-keyword">int&lt;/span> w = src.getWidth();
        &lt;span class="hljs-keyword">int&lt;/span> h = src.getHeight();
        &lt;span class="hljs-keyword">int&lt;/span> ww = watermark.getWidth();
        &lt;span class="hljs-keyword">int&lt;/span> wh = watermark.getHeight();
        &lt;span class="hljs-comment">// create the new blank bitmap&lt;/span>
        Bitmap newb = Bitmap.createBitmap(w, h, Config.ARGB_8888);&lt;span class="hljs-comment">// 创建一个新的和SRC长度宽度一样的位图&lt;/span>
        Canvas cv = &lt;span class="hljs-keyword">new&lt;/span> Canvas(newb);
        &lt;span class="hljs-comment">// draw src into&lt;/span>
        cv.drawBitmap(src, &lt;span class="hljs-number">0&lt;/span>, &lt;span class="hljs-number">0&lt;/span>, &lt;span class="hljs-keyword">null&lt;/span>);&lt;span class="hljs-comment">// 在 0,0坐标开始画入src&lt;/span>
        &lt;span class="hljs-comment">// draw watermark into&lt;/span>
        cv.drawBitmap(watermark, w - ww + &lt;span class="hljs-number">5&lt;/span>, h - wh + &lt;span class="hljs-number">5&lt;/span>, &lt;span class="hljs-keyword">null&lt;/span>);&lt;span class="hljs-comment">// 在src的右下角画入水印&lt;/span>
        &lt;span class="hljs-comment">// save all clip&lt;/span>
        cv.save(Canvas.ALL_SAVE_FLAG);&lt;span class="hljs-comment">// 保存&lt;/span>
        &lt;span class="hljs-comment">// store&lt;/span>
        cv.restore();&lt;span class="hljs-comment">// 存储&lt;/span>
        &lt;span class="hljs-keyword">return&lt;/span> newb;
    }
`
        ## View转成Bitmap
      

      
      <div class="top-box hide">
        <div class="alert-info">
        </div>
      </div>
      
      ```

` <span class=“hljs-comment”>/** * 把一个View的对象转换成bitmap */</span> <span class=“hljs-function”><span class=“hljs-keyword”>static</span> Bitmap <span class=“hljs-title”>getViewBitmap</span><span class=“hljs-params”>(View v)</span> </span>{

    v.clearFocus();
    v.setPressed(&lt;span class="hljs-keyword">false&lt;/span>);

    &lt;span class="hljs-comment">// 能画缓存就返回false&lt;/span>
    &lt;span class="hljs-keyword">boolean&lt;/span> willNotCache = v.willNotCacheDrawing();
    v.setWillNotCacheDrawing(&lt;span class="hljs-keyword">false&lt;/span>);
    &lt;span class="hljs-keyword">int&lt;/span> color = v.getDrawingCacheBackgroundColor();
    v.setDrawingCacheBackgroundColor(&lt;span class="hljs-number">0&lt;/span>);
    &lt;span class="hljs-keyword">if&lt;/span> (color != &lt;span class="hljs-number">0&lt;/span>) {
        v.destroyDrawingCache();
    }
    v.buildDrawingCache();
    Bitmap cacheBitmap = v.getDrawingCache();
    &lt;span class="hljs-keyword">if&lt;/span> (cacheBitmap == &lt;span class="hljs-keyword">null&lt;/span>) {
        Log.e(TAG, &lt;span class="hljs-string">"failed getViewBitmap("&lt;/span> + v + &lt;span class="hljs-string">")"&lt;/span>,
                &lt;span class="hljs-keyword">new&lt;/span> RuntimeException());
        &lt;span class="hljs-keyword">return&lt;/span> &lt;span class="hljs-keyword">null&lt;/span>;
    }
    Bitmap bitmap = Bitmap.createBitmap(cacheBitmap);
    &lt;span class="hljs-comment">// Restore the view&lt;/span>
    v.destroyDrawingCache();
    v.setWillNotCacheDrawing(willNotCache);
    v.setDrawingCacheBackgroundColor(color);
    &lt;span class="hljs-keyword">return&lt;/span> bitmap;
}

`

        </div>
      </div>
    </div>
    
    

      <!-- 如果是付费文章,未购买,则显示购买按钮 -->
      
      <!-- 连载目录项 -->
      
      <!-- 如果是付费文章 -->
      
      <!-- 如果是付费连载,已购买,且作者允许赞赏,则显示付费信息和赞赏 -->
    

    
    <div id="free-reward-panel" class="support-author">
    </div>
  </div>
  
  

    转自:https://www.jianshu.com/p/fe1955cdbc1f
  

</div>

💬 评论