版权声明:本文为HaiyuKing原创文章,转载请注明出处!

前言

用于缩放bitmap以及将bitmap保存成图片到SD卡中

效果图

代码分析

bitmapZoomByHeight(Bitmap srcBitmap, float newHeight): 根据指定的高度进行缩放(src是bitmap)

bitmapZoomByHeight(Drawable drawable, float newHeight) :根据指定的高度进行缩放(src是drawable)

bitmapZoomByScale(Bitmap srcBitmap, float scaleWidth, float scaleHeight): 根据指定的宽度比例值和高度比例值进行缩放

drawableToBitmap(Drawable drawable) :将drawable对象转成bitmap对象

drawableToBitmap2(Drawable drawable) :将drawable对象转成bitmap对象

saveBitmapToSDCard(Bitmap bitmap, String path): 将bitmap对象保存成图片到sd卡中

getBitmapFromSDCard(String path) :从sd卡中去除图片的bitmap对象

使用步骤

一、项目组织结构图

注意事项:

1、  导入类文件后需要change包名以及重新import R文件路径

2、  Values目录下的文件(strings.xml、dimens.xml、colors.xml等),如果项目中存在,则复制里面的内容,不要整个覆盖

二、导入步骤

将BitmapUtil复制到项目中

package com.why.project.bitmaputildemo.utils;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.PixelFormat;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable; import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream; /**
* Created by HaiyuKing
* Used
*/ public class BitmapUtil {
public static Bitmap temp; /**根据指定的高度进行缩放(source是bitmap)*/
public static Bitmap bitmapZoomByHeight(Bitmap srcBitmap, float newHeight) {
float scale = newHeight / (((float)srcBitmap.getHeight()));
return BitmapUtil.bitmapZoomByScale(srcBitmap, scale, scale);
}
/**根据指定的高度进行缩放(source是drawable)*/
public static Bitmap bitmapZoomByHeight(Drawable drawable, float newHeight) {
Bitmap bitmap = BitmapUtil.drawableToBitmap(drawable);
float scale = newHeight / (((float)bitmap.getHeight()));
return BitmapUtil.bitmapZoomByScale(bitmap, scale, scale);
} /**根据指定的宽度比例值和高度比例值进行缩放*/
public static Bitmap bitmapZoomByScale(Bitmap srcBitmap, float scaleWidth, float scaleHeight) {
int width = srcBitmap.getWidth();
int height = srcBitmap.getHeight();
Matrix matrix = new Matrix();
matrix.postScale(scaleWidth, scaleHeight);
Bitmap bitmap = Bitmap.createBitmap(srcBitmap, 0, 0, width, height, matrix, true);
if(bitmap != null) {
return bitmap;
}else {
return srcBitmap;
}
} /**将drawable对象转成bitmap对象*/
public static Bitmap drawableToBitmap(Drawable drawable) {
int width = drawable.getIntrinsicWidth();
int height = drawable.getIntrinsicHeight();
Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565;
Bitmap bitmap = Bitmap.createBitmap(width, height, config);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, width, height);
drawable.draw(canvas);
return bitmap;
} /**将drawable对象转成bitmap对象*/
public static Bitmap drawableToBitmap2(Drawable drawable) {
BitmapDrawable bd = (BitmapDrawable) drawable;
Bitmap bm= bd.getBitmap();
return bm;
} /**将bitmap对象保存成图片到sd卡中*/
public static void saveBitmapToSDCard(Bitmap bitmap, String path) { File file = new File(path);
if(file.exists()) {
file.delete();
}
try {
FileOutputStream fileOutputStream = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, ((OutputStream)fileOutputStream));//设置PNG的话,透明区域不会变成黑色 fileOutputStream.close();
System.out.println("----------save success-------------------");
}
catch(Exception v0) {
v0.printStackTrace();
} }
/**从sd卡中获取图片的bitmap对象*/
public static Bitmap getBitmapFromSDCard(String path) { Bitmap bitmap = null;
try {
FileInputStream fileInputStream = new FileInputStream(path);
if(fileInputStream != null) {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2; //当图片资源太大的适合,会出现内存溢出。图片宽高都为原来的二分之一,即图片为原来的四分一
bitmap = BitmapFactory.decodeStream(((InputStream) fileInputStream), null, options);
}
} catch(Exception e) {
return null;
} return bitmap;
} }

在AndroidMainfest.xml文件中声明权限

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.why.project.bitmaputildemo"> <!-- =================BitmapUtil用到的权限========================== -->
<!-- 允许程序读取外部存储文件 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<!-- 允许程序写入外部存储,如SD卡上写文件 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> <application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application> </manifest>

添加运行时权限的处理(本demo中采用的是修改targetSDKVersion=22)

三、使用方法

本Demo搭配《AppDir【创建缓存目录】》使用

package com.why.project.bitmaputildemo;

import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView; import com.why.project.bitmaputildemo.utils.AppDir;
import com.why.project.bitmaputildemo.utils.BitmapUtil; import java.io.File; public class MainActivity extends AppCompatActivity { private ImageView img_source;
private ImageView img_scale1;
private ImageView img_scale2; private Button btn_save;
private Button btn_show;
private ImageView img_show; private String pngFilePath; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); initViews();
initDatas();
initEvents();
} private void initViews() {
img_source = (ImageView) findViewById(R.id.img_source);
img_scale1 = (ImageView) findViewById(R.id.img_scale1);
img_scale2 = (ImageView) findViewById(R.id.img_scale2); btn_save = (Button) findViewById(R.id.btn_save);
btn_show = (Button) findViewById(R.id.btn_show);
img_show = (ImageView) findViewById(R.id.img_show);
} private void initDatas() {
img_source.setImageResource(R.mipmap.ic_launcher); Bitmap sourceBitmap = BitmapUtil.drawableToBitmap(getResources().getDrawable(R.mipmap.ic_launcher));
Bitmap sacleBitmap1 = BitmapUtil.bitmapZoomByHeight(sourceBitmap,200);
img_scale1.setImageBitmap(sacleBitmap1); Bitmap sacleBitmap2 = BitmapUtil.bitmapZoomByScale(sourceBitmap,2,1);
img_scale2.setImageBitmap(sacleBitmap2);
} private void initEvents() {
btn_save.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
pngFilePath = AppDir.getInstance(MainActivity.this).IMAGE + File.separator + System.currentTimeMillis() + ".png";
Bitmap sourceBitmap = BitmapUtil.drawableToBitmap(getResources().getDrawable(R.mipmap.ic_launcher));
BitmapUtil.saveBitmapToSDCard(sourceBitmap,pngFilePath);
}
}); btn_show.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String pngPath = pngFilePath;
Bitmap pngBitmap = BitmapUtil.getBitmapFromSDCard(pngPath);
img_show.setImageBitmap(pngBitmap);
}
});
}
}

混淆配置

参考资料

Android常用的Drawable和Bitmap之间的转化方法

项目demo下载地址

https://github.com/haiyuKing/BitmapUtilDemo

BitmapUtil【缩放bitmap以及将bitmap保存成图片到SD卡中】的更多相关文章

  1. C# 图片缩放,拖拽后保存成图片的功能

    窗体界面部分如下: 鼠标的缩放功能需要手动在 OpertaionImg.Designer.cs 文件里面添加一句代码,具体代码如下: //picturePhoto显示图片的控件 this.pictur ...

  2. android 文件保存到应用和sd卡中

    <span style="font-size:18px;">1.权限添加 <uses-permission android:name="android. ...

  3. 如何把Excel中的单元格等对象保存成图片

    对于Excel中的很多对象,比如单元格(Cell),图形(shape),图表(chart)等等,有时需要将它们保存成一张图片.就像截图一样. 最近做一个Excel相关的项目,项目中遇到一个很变态的需求 ...

  4. javacpp-opencv图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体、位置、大小、粗度、翻转、平滑等操作

    欢迎大家积极开心的加入讨论群 群号:371249677 (点击这里进群) javaCV图像处理系列: javaCV图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体.位置. ...

  5. OpenGL中的深度、深度缓存、深度测试及保存成图片

    1.深度 所谓深度,就是在openGL坐标系中,像素点Z坐标距离摄像机的距离.摄像机可能放在坐标系的任何位置,那么,就不能简单的说Z数值越大或越小,就是越靠近摄像机. 2.深度缓冲区 深度缓冲区原理就 ...

  6. 修改css的(屏蔽)overflow: hidden;实现浏览器能把网页全图保存成图片

    摘要: 1.项目需要,需要对网页内容“下载”保存成全图片 2.QQ浏览器等主流浏览器都支持这种下载保存功能 3.项目需要场景:编写好的项目维护文档,放在服务器上.如果是txt不能带图片可视化,如果wo ...

  7. Java 将 PPT 形状(表格、文本框、心形、图表等)保存成图片

    MS PowerPoint中的表格.文本框.心形.图表.图片等均可以称为形状,将这些形状保存成图片,便可分类储存,方便日后查找,再利用. 本文将介绍如何使用 Spire.Presentation fo ...

  8. 如何实现批量截取整个网页完整长截图,批量将网页保存成图片web2pic/webshot/screencapture/html2picture

    如何实现批量截取整个网页完整长截图,批量将网页保存成图片web2pic/webshot/screencapture [困扰?疑问?]: 您是否正受到:如何将网页保存为图片的困扰?网页很高很长截图截不全 ...

  9. c# 将byte数组保存成图片

    将byte数组保存成图片: 方式一:System.IO.File.WriteAllBytes(@"c:\test.jpg", bytes); 方式二:MemoryStream ms ...

随机推荐

  1. Maven项目中,系统设置的CLASSPATH环境变量问题

    在Maven项目中,系统的CLASSPATH环境变量失效了吗?在用Maven开发登录网站时,servlet-api出现错误,jdbc也出现错误,都是ClassNotFoundException,但这两 ...

  2. BigInteger类及方法应用

    注:以下内容来自传智播客(itcast)老师授课 BigInteger 可以让超过Integer范围内的数据进行运算 构造方法 public BigInteger(String val) 成员方法 p ...

  3. 测试APPEND INSERT是否产生UNDO信息的过程

    D:\>sqlplus test/testSQL*Plus: Release 11.1.0.6.0 - Production on 星期三 06月 29 19:46:41 2016Copyrig ...

  4. I/O-----字符输出流

    package io.day04; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileR ...

  5. MySQL 慢查询日志总结

    慢查询日志概念 MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志 ...

  6. BZOJ_2693_jzptab_莫比乌斯反演

    BZOJ_2693_jzptab_莫比乌斯反演 Description Input 一个正整数T表示数据组数 接下来T行 每行两个正整数 表示N.M Output T行 每行一个整数 表示第i组数据的 ...

  7. 阿里巴巴Java开发程序猿年薪40W是什么水平?

    对于年薪40万的程序员,不只是技术过硬,还有一个原因是他们所在的公司福利高,或者会直接持股.在BAT中就是一个很好的案例,例如阿里巴巴P7,P8级别的员工不仅是年薪30到80万不等,还有更多股票持有. ...

  8. Charles模拟网络请求页面的网络超时测试

    正常情况下网络连接超时可能的原因有以下几点: 1.网络断开,手动的关掉了网络的连接 2.网络阻塞,导致你不能在程序默认等待时间内得到回复数据包. 3.网络不稳定,网络无法完整传送服务器信息. 4.系统 ...

  9. 【公告】MIP组件审核平台故障-影响说明

    故障通报 2017年8月8日 下午14:11,由于机器故障原因,MIP组件审核平台无法提供服务. 2017年8月8日 下午16:46,服务恢复. 故障影响 2017年8月8日下午13:00-14:00 ...

  10. 如何扩展分布式日志组件(Exceptionless)的Webhook事件通知类型?

    写在前面 从上一篇博客高并发.低延迟之C#玩转CPU高速缓存(附示例)到现在又有几个月没写博客了,啥也不说,变得越来越懒了,懒惰产生了拖延后遗症. 最近一周升级了微服务项目使用的分布式日志组件Exce ...