以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考
将Drawable转为Bitmap
public static Bitmap drawableToBitmap(Drawable drawable) {
Bitmap bitmap = Bitmap
.createBitmap(
drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight(),drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
: Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(bitmap);
// canvas.setBitmap(bitmap);
drawable.setBounds(0,drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());
drawable.draw(canvas);
return bitmap;
}
将Bitmap转为btye[]
public static byte[] bmpToByteArray(final Bitmap bmp,final boolean needRecycle) {
ByteArrayOutputStream output = new ByteArrayOutputStream();
bmp.compress(CompressFormat.JPEG,80,output);
if (needRecycle) {
bmp.recycle();
}
byte[] result = output.toByteArray();
try {
output.close();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
将图片存储到sdcard中
public static void storeImageToSDCARD(Bitmap colorImage,String ImageName,String path) {
File file = new File(path);
if (!file.exists()) {
file.mkdir();
}
File imagefile = new File(file,ImageName + ".jpg");
try {
imagefile.createNewFile();
FileOutputStream fos = new FileOutputStream(imagefile);
colorImage.compress(Bitmap.CompressFormat.JPEG,100,fos);
fos.flush();
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
sdcard取图片
public static Bitmap getImg(String path,String picName) {
if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
return null;
}
try {
File file = new File(path,picName + ".png");
FileInputStream inputStream = new FileInputStream(file);
byte[] b = new byte[inputStream.available()];
inputStream.read(b);
Bitmap bitmap = BitmapFactory.decodeByteArray(b,b.length);
return bitmap;
} catch (Exception e) {
return null;
}
}
网络获取图片
public static Bitmap getImageByNet(String urlpath) throws Exception {
URL url = new URL(urlpath);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5 * 1000);
Bitmap bitmap = null;
if (conn.getResponseCode() == 200) {
InputStream inputStream = conn.getInputStream();
bitmap = BitmapFactory.decodeStream(inputStream);
}
return bitmap;
}
将两个bitmap对象整合并保存为一张图片
public Bitmap combineBitmap(Bitmap background,Bitmap foreground) {
//第一张图片的宽高
int bgWidth = background.getWidth();
int bgHeight = background.getHeight();
//第二章图片的宽高
int fgWidth = foreground.getWidth();
int fgHeight = foreground.getHeight();
//创建一个新的bitmao 高度等于两张高度的总和 用来竖列拼接
Bitmap newmap = Bitmap.createBitmap(bgWidth,bgHeight + fgHeight,android.graphics.Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(newmap);
//画上第一张图片
canvas.drawBitmap(background,null);
//从第一张图片的下边开始画入第二张图片
canvas.drawBitmap(foreground,bgHeight,null);
return newmap;
}
Bitmap旋转一定角度
public static Bitmap rotate(Bitmap b,int degrees) {
if (degrees != 0 && b != null) {
Matrix m = new Matrix();
m.setRotate(degrees,(float) b.getWidth() / 2,(float) b.getHeight() / 2);
try {
Bitmap b2 = Bitmap.createBitmap(b,b.getWidth(),b.getHeight(),m,true);
return b2;// 正常情况下返回旋转角度的图
} catch (OutOfMemoryError ex) {
return b;// 内存溢出返回原图
} finally {
b.recycle();// 释放资源
}
}
return b;
}
Bitmap画一个圆角图
public static Bitmap getRoundedCornerBitmap(Bitmap bitmap,float roundPx) {
if (bitmap == null) {
return bitmap;
}
try {
Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(),Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final int color = 0xff424242;
final Paint paint = new Paint();
final Rect rect = new Rect(0,bitmap.getWidth(),bitmap.getHeight());
final RectF rectF = new RectF(rect);
paint.setAntiAlias(true);
canvas.drawARGB(0,0);
paint.setColor(color);
canvas.drawRoundRect(rectF,roundPx,paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap,rect,paint);
return output;
} catch (OutOfMemoryError e) {
// TODO: handle exception
System.gc();
return null;
}
}
从view 得到图片
public static Bitmap getBitmapFromView(View view) {
view.destroyDrawingCache();
view.measure(View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED),View.MeasureSpec
.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED));
view.layout(0,view.getMeasuredWidth(),view.getMeasuredHeight());
view.setDrawingCacheEnabled(true);
Bitmap bitmap = view.getDrawingCache(true);
return bitmap;
}
添加水印
public static Bitmap watermarkBitmap(Bitmap src,Bitmap watermark,String title) {
if (src == null) {
return null;
}
int w = src.getWidth();
int h = src.getHeight();
// 需要处理图片太大造成的内存超过的问题,这里我的图片很小所以不写相应代码了
Bitmap newb = Bitmap.createBitmap(w,h,Config.ARGB_8888);// 创建一个新的和SRC长度宽度一样的位图
Canvas cv = new Canvas(newb);
cv.drawBitmap(src,null);// 在 0,0坐标开始画入src
Paint paint = new Paint();
// 加入图片
if (watermark != null) {
int ww = watermark.getWidth();
int wh = watermark.getHeight();
paint.setAlpha(50);
cv.drawBitmap(watermark,w - ww + 5,h - wh + 5,paint);// 在src的右下角画入水印
}
// 加入文字
if (title != null) {
String familyName = "宋体";
Typeface font = Typeface.create(familyName,Typeface.BOLD);
TextPaint textPaint = new TextPaint();
textPaint.setColor(Color.RED);
textPaint.setTypeface(font);
textPaint.setTextSize(22);
// 这里是自动换行的
StaticLayout layout = new StaticLayout(title,textPaint,w,Alignment.ALIGN_NORMAL,1.0F,0.0F,true);
layout.draw(cv);
// 文字就加左上角算了
// cv.drawText(title,40,paint);
}
cv.save(Canvas.ALL_SAVE_FLAG);// 保存
cv.restore();// 存储
return newb;
}
等比例压缩图片
public static Bitmap getBitmap(Bitmap bitmap,int screenWidth,int screenHight) {
int w = bitmap.getWidth();
int h = bitmap.getHeight();
Matrix matrix = new Matrix();
float scale = (float) screenWidth / w;
float scale2 = (float) screenHight / h;
//取比例小的值 可以把图片完全缩放在屏幕内
scale = scale < scale2 ? scale : scale2;
// 都按照宽度scale 保证图片不变形.根据宽度来确定高度
matrix.postScale(scale,scale);
// w,h是原图的属性.
return Bitmap.createBitmap(bitmap,matrix,true);
} 以最省内存的方式读取本地资源的图片
public static Bitmap ReadBitmapById(Context context,int drawableId,int screenHight) {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Config.ARGB_8888;
options.inInputShareable = true;
options.inPurgeable = true;
InputStream stream = context.getResources().openRawResource(drawableId);
Bitmap bitmap = BitmapFactory.decodeStream(stream,null,options);
return getBitmap(bitmap,screenWidth,screenHight);
}
以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|