✍️作者简介:沫小北/码农小北(专注于Android、Web、TCP/IP等技术方向)
博客主页:沫小北/码农小北 开源中国、稀土、51cto博客、博客园、知乎、简书、慕课网、CSDN
如果文章对您有一定的帮助请关注✨、点赞、收藏、评论。
如需转载请参考【转载须知】
Android BitmapUtil 图片的工具类,它提供了许多常用的方法来处理和操作 Bitmap 图片。这些方法包括更改透明度、缩放图片、保存图片到相册、压缩图片、获取 Bitmap 大小等等。通过这个工具类,你可以更加方便地处理 Bitmap 图片,以满足你的各种需求。
BitmapUtil 使用实例
在这个实例中,我们展示了如何使用 BitmapUtil 类的各种方法来处理和操作 Bitmap 图片。你可以根据这个示例中的代码来了解如何使用 BitmapUtil 类中的各种功能。
// 1. 将Drawable转换为Bitmap
Drawable drawable = getResources().getDrawable(R.drawable.example_image);
Bitmap bitmapFromDrawable = BitmapUtil.drawableToBitmap(drawable);
// 2. 将Bitmap转换为字节数组
byte[] bytesFromBitmap = BitmapUtil.bitmapToBytes(bitmapFromDrawable);
// 3. 从View获取Bitmap
View rootView = findViewById(android.R.id.content);
Bitmap bitmapFromView = BitmapUtil.getBitmapFromView(rootView);
// 4. 按比例压缩Bitmap
// 请确保您有一个有效的Bitmap对象
Bitmap compressedBitmap = BitmapUtil.compressByScale(bitmapFromDrawable, 100, 100);
// 5. 获取Bitmap大小
int bitmapSize = BitmapUtil.getBitmapBytes(bitmapFromDrawable);
// 6. 从本地路径获取Bitmap
String filePath = "your_file_path";
Bitmap bitmapFromPath = BitmapUtil.getBitmapFromLocalPath(filePath);
// 7. 保存Bitmap到文件
String savePath = "your_save_file_path";
BitmapUtil.saveBitmapFile(bitmapFromDrawable, savePath);
// 8. 释放Bitmap资源
BitmapUtil.recycle(bitmapFromDrawable);
BitmapUtil 工具类
这个版本的 BitmapUtil 类包含了许多常用的 Bitmap 操作,可以满足你大部分的需求。如果你有其他特定的功能需求,也可以在此基础上进一步添加。
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.drawable.Drawable;
import android.media.MediaScannerConnection;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.View;
import androidx.annotation.NonNull;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class BitmapUtil {
public static final int BITMAP_MAX_SIZE = 200; //kb
private BitmapUtil() {
// 私有构造函数
}
/**
* 更改 bitmap 透明度
*
* @param srcBitmap 原始 bitmap
* @param alpha 透明度
* @param isRecycle 是否释放原图
* @return 更改透明度后的 bitmap
*/
public static Bitmap toAlpha(Bitmap srcBitmap, int alpha, boolean isRecycle) {
Paint paint = new Paint();
paint.setAlpha(alpha);
Bitmap descBitmap = Bitmap.createBitmap(srcBitmap.getWidth(), srcBitmap.getHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(descBitmap);
c.drawBitmap(srcBitmap, 0, 0, paint);
if (isRecycle) {
recycle(srcBitmap);
}
return descBitmap;
}
/**
* 缩放图片
*
* @param bitmap 原始 bitmap
* @param scaleWidth 缩放宽度
* @param scaleHeight 缩放高度
* @return 缩放后的 bitmap
*/
public static Bitmap createBitmap(Bitmap bitmap, float scaleWidth, float scaleHeight) {
int width = bitmap.getWidth();
int height = bitmap.getHeight();
Matrix matrix = new Matrix();
matrix.postScale(scaleWidth, scaleHeight);
return Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
}
/**
* 保存图片到相册
*
* @param context 应用程序上下文
* @param bmp 需要保存的 bitmap
*/
public static void saveImageToGallery(Context context, Bitmap bmp) {
File appDir = new File(Environment.getExternalStorageDirectory(), "COAL");
if (!appDir.exists()) {
appDir.mkdir();
}
String fileName = "coal_" + System.currentTimeMillis() + ".jpg";
File file = new File(appDir, fileName);
try {
FileOutputStream fos = new FileOutputStream(file);
bmp.compress(Bitmap.CompressFormat.JPEG, 100, fos);
fos.flush();
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
MediaScannerConnection.scanFile(context, new String[]{file.toString()}, null, null);
}
/**
* 根据 Bitmap 转换成 Uri
*
* @param context 应用程序上下文
* @param inImage 需要转换的 bitmap
* @return 转换后的 Uri
*/
public static Uri bitmapToUri(Context context, Bitmap inImage) {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
String path = MediaStore.Images.Media.insertImage(context.getContentResolver(), inImage, "Title", null);
return Uri.parse(path);
}
/**
* Drawable 转换成 bitmap
*
* @param drawable 需要转换的 drawable
* @return 转换后的 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;
}
/**
* bitmap 转换成 byte
*
* @param bitmap
* @return 转换后的 byte
*/
public static byte[] bitmapToBytes(Bitmap bitmap) {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
return stream.toByteArray();
}
/**
* 从View获取Bitmap
*
* @param view 文件路径
* @return 返回 bitmap
*/
public static Bitmap getBitmapFromView(View view) {
Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
view.draw(canvas);
return bitmap;
}
/**
* 按比例大小压缩Bitmap
*
* @param srcBitmap 文件路径
* @param targetWidth 设置宽度
* @param targetHeight 设置高度
* @return 返回 bitmap
*/
public static Bitmap compressByScale(Bitmap srcBitmap, int targetWidth, int targetHeight) {
return Bitmap.createScaledBitmap(srcBitmap, targetWidth, targetHeight, true);
}
/**
* 质量压缩图片
*
* @param image 需要压缩的 bitmap
* @return 压缩后的图片 byte 数组
*/
public static byte[] compressImageByte(Bitmap image) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.JPEG, 100, baos);
int options = 100;
while (baos.toByteArray().length / 1024 > BITMAP_MAX_SIZE) {
baos.reset();
image.compress(Bitmap.CompressFormat.JPEG, options, baos);
options -= 10;
}
return baos.toByteArray();
}
/**
* 获取 bitmap 大小
*
* @param bitmap 目标 bitmap
* @return bitmap 的大小
*/
public static int getBitmapBytes(Bitmap bitmap) {
int result = bitmap.getByteCount();
if (result < 0) {
throw new IllegalStateException("Negative size: " + bitmap);
}
return result;
}
/**
* 释放 bitmap 资源
*
* @param bitmap 需要释放的 bitmap
*/
public static void recycle(Bitmap bitmap) {
if (bitmap != null && !bitmap.isRecycled()) {
bitmap.recycle();
}
}
/**
* 根据图片路径获取 bitmap
*
* @param context 应用程序上下文
* @param filePath 图片文件路径
* @return 对应的 bitmap
*/
public static Bitmap getBitmapByUrl(@NonNull Context context, String filePath) {
File file = new File(filePath);
Uri uri = Uri.fromFile(file);
Bitmap bitmap = null;
try {
bitmap = MediaStore.Images.Media.getBitmap(context.getContentResolver(), uri);
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}
/**
* bitmap 转文件
*
* @param bitmap 需要转换的 bitmap
* @param filePath 文件路径
*/
public static void saveBitmapFile(Bitmap bitmap, String filePath) {
File file = new File(filePath);
BufferedOutputStream bos = null;
try {
bos = new BufferedOutputStream(new FileOutputStream(file));
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos);
bos.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bos != null) {
try {
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* 本地图片转化为Bitmap
*
* @param filePath 文件路径
* @return 返回 bitmap
*/
public static Bitmap getBitmapFromLocalPath(String filePath) {
return BitmapFactory.decodeFile(filePath);
}
}
无论是哪个阶段,坚持努力都是成功的关键。不要停下脚步,继续前行,即使前路崎岖,也请保持乐观和勇气。相信自己的能力,你所追求的目标定会在不久的将来实现。加油!
本文使用 文章同步助手 同步