网上都说 bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);替换成bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);格式,可能大部分人再保存的图片都不是黑色了,那恭喜你们,可我的怎么设置都是黑色,今天终于找到了突破口。
注释的地方是保存到sdk,我用的是保存到指定路径,你们看着用
private void viewSaveToImage(View view) {
view.setDrawingCacheEnabled(true);
view.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
view.setDrawingCacheBackgroundColor(Color.WHITE);
// 把一个View转换成图片
Bitmap cachebmp = loadBitmapFromView(view);
File file = new File("/sdcard/aibiji/");
if(!file.exists())
file.mkdirs();
FileOutputStream fos=null;
try {
fos = new FileOutputStream(file.getPath() +"/"+gCurBookID+"-"+gCurPageID+"-"+pictureOrder+".png");
cachebmp.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.flush();
System.out.println("saveBmp is here");
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
//保存到sdk卡
// FileOutputStream fos;
// String imagePath = "";
// try {
// // 判断手机设备是否有SD卡
// boolean isHasSDCard = Environment.getExternalStorageState().equals(
// android.os.Environment.MEDIA_MOUNTED);
// if (isHasSDCard) {
// // SD卡根目录
// File sdRoot = Environment.getExternalStorageDirectory();
// File file = new File(sdRoot, Calendar.getInstance().getTimeInMillis()+".png");
// fos = new FileOutputStream(file);
// imagePath = file.getAbsolutePath();
// } else
// throw new Exception("创建文件失败!");
//
// cachebmp.compress(Bitmap.CompressFormat.PNG, 90, fos);
//
// fos.flush();
// fos.close();
//
// } catch (Exception e) {
// e.printStackTrace();
// }
view.destroyDrawingCache();
}
计算view的大小,实在不行再绘制,你设置画布了,如果再添加什么图片,我就给你设置成透明,不管你怎么操作就是不影响
private Bitmap loadBitmapFromView(View v) {
int w = v.getWidth();
int h = v.getHeight();
Bitmap bmp = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(bmp);
c.drawColor(Color.WHITE);
/** 如果不设置canvas画布为白色,则生成透明 */
v.layout(0, 0, w, h);
v.draw(c);
return bmp;
}