您的位置:首页 > 移动开发 > Android开发

Android 中 Bitmap 常用操作

2017-12-29 13:56 162 查看

Android 中 Bitmap 常用操作

一些Bitmap常用操作写到一个工具类里:读取,保存,裁剪,旋转,缩放,绘制,写字

package com.example.wurui.jnitest;

import android.app.Application;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;

/**
* Created by wurui on 17-12-29.
*/

public class BitmapProcess {

// 读取Bitmap
public Bitmap readFromSdcard(){
Bitmap testbitmap = null;
try {
File file1 = new File("/storage/emulated/0/Android/"+"image.jpg");
InputStream in = new FileInputStream(file1);
testbitmap = BitmapFactory.decodeStream(in).copy(Bitmap.Config.ARGB_8888, true);
// 不允许对drawable的文件修改,canvas会报错,要拷贝;
}catch (Exception e){
}
return testbitmap;
}

public Bitmap readFromAssets(String filename){
Bitmap testbitmap = null;
try{
filename = "test/golf299.jpg"; // Assets/test/golf299.jpg
InputStream stream =  MyApplication.getMyApplication().getApplicationContext().getAssets().open(filename);
testbitmap = BitmapFactory.decodeStream(stream);
}
catch (Exception e){
}
return testbitmap;
}

// 裁剪Bitmap
public Bitmap cutBitmap(Bitmap bmp, int w, int h){
return Bitmap.createScaledBitmap(bmp, w, h,true);
}

// 多张Bitmap融合贴片: 示例4张合并
private Bitmap mergeBitmap(Bitmap m1, Bitmap m2,Bitmap m3,Bitmap m4){
int scaled_size = (int) m1.getHeight()/2;
Bitmap map1 = Bitmap.createScaledBitmap(m1,scaled_size,scaled_size,true);
Bitmap map2 = Bitmap.createScaledBitmap(m2,scaled_size,scaled_size,true);
Bitmap map3 = Bitmap.createScaledBitmap(m3,scaled_size,scaled_size,true);
Bitmap map4 = Bitmap.createScaledBitmap(m4,scaled_size,scaled_size,true);
Bitmap map0 = Bitmap.createBitmap(m1.getWidth(),m1.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(map0);
canvas.drawBitmap(map1,0,0,null);
canvas.drawBitmap(map2,scaled_size,0,null);
canvas.drawBitmap(map3,0,scaled_size,null);
canvas.drawBitmap(map4,scaled_size,scaled_size,null);
return map0;
}

// 旋转和缩放Bitmap
public static Bitmap rotateResize(Bitmap bmp, int angle, int dw, int dh){
int w = bmp.getWidth();
int h = bmp.getHeight();
float scaleW = ((float)dw) / w;
float scaleH = ((float)dh) / h;
Matrix matrix = new Matrix();
matrix.postScale(scaleW,scaleH);
matrix.postRotate(angle);
bmp = Bitmap.createBitmap(bmp,0, 0, dw, dh, matrix, true);
return bmp;
}

// 在Bitmap上画图和写字
public void drawBitmap(Bitmap resource, int[] eigen) {
Canvas canvas = new Canvas(resource);
Paint paint = new Paint();
paint.setColor(Color.GREEN);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(2);

canvas.drawCircle(10, 20, 3, paint);
canvas.drawLine(0, 0, 10, 10, paint);

String text = " 一些字 ";
Paint paintText = new Paint(Paint.ANTI_ALIAS_FLAG);
paintText.setColor(Color.BLUE);
paintText.setStyle(Paint.Style.STROKE);
paintText.setStrokeWidth(2);
canvas.drawText(text, 10, 40, paintText);
}

// 保存Bitmap到本地
public boolean saveBitmapTofile(Bitmap bmp, String filename) {
if (bmp == null || filename == null)
return false;
Bitmap.CompressFormat format = Bitmap.CompressFormat.JPEG;
int quality = 100;
FileOutputStream stream = null;
try {
stream = new FileOutputStream("/storage/emulated/0/Android/frames/" + filename);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return bmp.compress(format, quality, stream);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐