界面跳转 intent 中的数据内容较多
Android调用系统裁减图片
批量插入大量数据到数据库(我是这种情况,一下主要针对批量插入数据库讲解)
在以上三种传输中 大于200K就会报错
在微信分享图片的时候无法分享,工程报错如标题。
解决方法如下:
分享图片方法
private void shareWeiXin(int type){
// scrollView包裹的界面生成bitmap
Bitmap bmp = BitmapUtils.getBitmapByView(scrollView);
if (bmp != null) {
byte[] bytes1 = BitmapUtils.bitmap2Bytes(bmp, 30);
if (bytes1 != null) {
Bitmap bitmap = BitmapUtils.Byte2Bitmap(bytes1);
WXImageObject imgObj = new WXImageObject(bitmap);
WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject = imgObj;
Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, 150, 150*bmp.getHeight()/bmp.getWidth(), true);
bmp.recycle();
msg.thumbData = BitmapUtils.bitmap2Bytes(thumbBmp,30);
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = "";
req.message = msg;
req.scene =type==0?SendMessageToWX.Req.WXSceneSession:SendMessageToWX.Req.WXSceneTimeline;
api.sendReq(req);
}
}
}
生成分享的图片getBitmapByView
/**
* 获取scrollview 视图
* @param scrollView
* @return
*/
public static Bitmap getBitmapByView(ScrollView scrollView) {
int h = 0;
Bitmap bitmap = null;
for (int i = 0; i < scrollView.getChildCount(); i++) {
h += scrollView.getChildAt(i).getHeight();
scrollView.getChildAt(i).setBackgroundColor(
Color.parseColor("#1a2634"));
}
bitmap = Bitmap.createBitmap(scrollView.getWidth(), h,
Bitmap.Config.ARGB_8888);
final Canvas canvas = new Canvas(bitmap);
scrollView.draw(canvas);
return bitmap;
}
将图片压缩到需要的大小
/**
* Bitmap转换成byte[]并且进行压缩,压缩到不大于maxkb
*
* @param bitmap
* @return
*/
public static byte[] bitmap2Bytes(Bitmap bitmap, int maxkb) {
ByteArrayOutputStream output = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, output);
int options = 100;
while (output.toByteArray().length > maxkb * 1024 && options != 10) {
output.reset(); //清空output
bitmap.compress(Bitmap.CompressFormat.JPEG, options, output);//这里压缩options%,把压缩后的数据存放到output中
options -= 10;
}
// 传值 byte 大于200*1024就会报错
if (options == 10 && output.toByteArray().length > 200000) {
while (output.toByteArray().length > 200000&& options != 1) {
output.reset(); //清空output
bitmap.compress(Bitmap.CompressFormat.JPEG, options, output);//这里压缩options%,把压缩后的数据存放到output中
options -= 1;
}
}
return output.toByteArray();
}