这个问题很简单,我们可以:
public static void writePhotoJpg(Bitmap data, String pathName) {
File file = new File(pathName);
try {
file.createNewFile();
// BufferedOutputStream os = new BufferedOutputStream(
// new FileOutputStream(file));
FileOutputStream os = new FileOutputStream(file);
data.compress(Bitmap.CompressFormat.JPEG, 100, os);
os.flush();
os.close();
} catch (Exception e) {
e.printStackTrace();
}
}
但是这个方法并非全部成功:因为“注意:并非所有格式都直接支持所有位图配置,因此BitmapFactory返回的位图可能位于不同的bitdepth中,和/或可能丢失了每像素alpha (例如,JPEG仅支持不透明像素)。“在谷歌文件中。没有运气我有这个问题:在我使用的相机预览中:
private Bitmap printScreen() {
View view = this.getWindow().getDecorView();
// if (view.isDrawingCacheEnabled()) {
view.setDrawingCacheEnabled(true);
Calendar c = Calendar.getInstance();
String date = c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + c.get(Calendar.DAY_OF_MONTH) + " " + c.get(Calendar.HOUR_OF_DAY) + "-" + c.get(Calendar.MINUTE) + "-" + c.get(Calendar.SECOND);
// }
view.buildDrawingCache();
Bitmap bmp = view.getDrawingCache();
return bmp ;
}
所以当我使用setImageBitmap(bmp)时,看起来非常好,但是当我打开save jpeg文件时它是一个黑色的jpeg.so我认为save方法不好,你能告诉我另一种保存方法吗?
答案 0 :(得分:3)
你可以试试这个:
public static final int BUFFER_SIZE = 1024 * 8;
static void writeExternalToCache(Bitmap bitmap, File file) {
try {
file.createNewFile();
FileOutputStream fos = new FileOutputStream(file);
final BufferedOutputStream bos = new BufferedOutputStream(fos, BUFFER_SIZE);
bitmap.compress(CompressFormat.JPEG, 100, bos);
bos.flush();
bos.close();
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
}
}
它适用于我的代码,所以如果它不起作用,请尝试查找错误:
1.位图显示对吗?
2.在哪里是位图保存文件?该文件有一些限制?像大小或... ...
如果错误是您的帖子原因,您可以尝试使用Bitmap.Config.RGB_565
再次解码位图。
答案 1 :(得分:0)
使用.getRootView()
视图方法或布局包含此视图,使用它(例如) mainLayout 在索引1处包含一个图像视图,然后mainlayou.getChildAt(1)
来获取视图。
E.g。
View v1 = mainLayout.getChildAt(1); //OR View v1 = mainLayout.getRootView();
v1.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache());
v1.setDrawingCacheEnabled(false);
return bitmap;
希望对你有所帮助......