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 {
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);
}catch (Exception e){
}
return testbitmap;
}
public Bitmap readFromAssets(String filename){
Bitmap testbitmap = null;
try{
filename = "test/golf299.jpg";
InputStream stream = MyApplication.getMyApplication().getApplicationContext().getAssets().open(filename);
testbitmap = BitmapFactory.decodeStream(stream);
}
catch (Exception e){
}
return testbitmap;
}
public Bitmap cutBitmap(Bitmap bmp, int w, int h){
return Bitmap.createScaledBitmap(bmp, w, h,true);
}
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;
}
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;
}
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);
}
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) {
e.printStackTrace();
}
return bmp.compress(format, quality, stream);
}
}