/**
* 裁剪
*
* @param bitmap 原图
* @param l 原图 - 左
* @param t 原图 - 上
* @param r 原图 - 右
* @param b 原图 - 下
* @return 裁剪后图片
*/
private Bitmap cropBitmap(Bitmap bitmap, int l, int t, int r, int b) {
int width = bitmap.getWidth();
int height = bitmap.getHeight();
int maxWidth = width - l;
int maxHeight = height - t;
if (r > maxWidth) {
r = maxWidth;
}
if (b > maxHeight) {
b = maxHeight;
}
Bitmap newIMG = Bitmap.createBitmap(bitmap, l, t, r - l, b - t, null, false);
if (newIMG.equals(bitmap)) {
return newIMG;
}
bitmap.recycle();
return newIMG;
}
/**
* 指定位置绘制边框
*
* @param bitmap
* @param l
* @param t
* @param r
* @param b
* @param lineWidth
* @return
*/
private static Bitmap drawFrame(Bitmap bitmap, int l, int t, int r, int b, int lineWidth, @ColorInt int lineColor) {
if (bitmap == null) {
return null;
}
Bitmap copy = bitmap.copy(Bitmap.Config.ARGB_8888, true);
bitmap.recycle();
//创建画布
Canvas canvas = new Canvas(copy);
//画笔
Paint paint = new Paint();
//设置线宽。单位为像素
paint.setStrokeWidth(lineWidth);
//抗锯齿
paint.setAntiAlias(true);
//画笔颜色
paint.setColor(lineColor);
//画笔风格,描边
paint.setStyle(Paint.Style.STROKE);
canvas.drawRect(l, t, r, b, paint);
canvas.save();
return copy;
}
/**
* 根据给定的宽和高进行拉伸
*
* @param origin 原图
* @param newWidth 新图的宽
* @param newHeight 新图的高
* @return new Bitmap
*/
private Bitmap scaleBitmap(Bitmap origin, int newWidth, int newHeight) {
if (origin == null) {
return null;
}
int height = origin.getHeight();
int width = origin.getWidth();
float scaleWidth = ((float) newWidth) / width;
float scaleHeight = ((float) newHeight) / height;
Matrix matrix = new Matrix();
matrix.postScale(scaleWidth, scaleHeight);// 使用后乘
Bitmap newBM = Bitmap.createBitmap(origin, 0, 0, width, height, matrix, false);
if (!origin.isRecycled()) {
origin.recycle();
}
return newBM;
}
/**
* 按比例缩放图片
*
* @param origin 原图
* @param ratio 比例
* @return 新的bitmap
*/
private Bitmap scaleBitmap(Bitmap origin, float ratio) {
if (origin == null) {
return null;
}
int width = origin.getWidth();
int height = origin.getHeight();
Matrix matrix = new Matrix();
matrix.preScale(ratio, ratio);
Bitmap newBM = Bitmap.createBitmap(origin, 0, 0, width, height, matrix, false);
if (newBM.equals(origin)) {
return newBM;
}
origin.recycle();
return newBM;
}
/**
* 选择变换
*
* @param origin 原图
* @param alpha 旋转角度,可正可负
* @return 旋转后的图片
*/
private Bitmap rotateBitmap(Bitmap origin, float alpha) {
if (origin == null) {
return null;
}
int width = origin.getWidth();
int height = origin.getHeight();
Matrix matrix = new Matrix();
matrix.setRotate(alpha);
// 围绕原地进行旋转
Bitmap newBM = Bitmap.createBitmap(origin, 0, 0, width, height, matrix, false);
if (newBM.equals(origin)) {
return newBM;
}
origin.recycle();
return newBM;
}
/**
* 偏移效果
*
* @param origin 原图
* @return 偏移后的bitmap
*/
private Bitmap skewBitmap(Bitmap origin) {
if (origin == null) {
return null;
}
int width = origin.getWidth();
int height = origin.getHeight();
Matrix matrix = new Matrix();
matrix.postSkew(-0.6f, -0.3f);
Bitmap newBM = Bitmap.createBitmap(origin, 0, 0, width, height, matrix, false);
if (newBM.equals(origin)) {
return newBM;
}
origin.recycle();
return newBM;
}
Android教程-图像操作-Bitmap
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 最近在做项目的时候,遇到了将网络图片资源保存到本地的需求,刚开始是直接开一个下载的线程去下载这张图片,但是考虑到项...