【发布时间】:2015-04-24 09:11:09
【问题描述】:
我正在尝试从我的前置摄像头捕获图像并将其保存到我的画廊中,它可以在纵向和横向两个方向上与后置摄像头一起正常工作 但是对于前置摄像头,它仅适用于风景,
如果是 PORTRAIT,图像会倒置 180 度 我尝试了以下代码,因为它是最常见的解决方案,但没有任何效果
FileOutputStream fos;
try {
fos = new FileOutputStream(fileName);
fos.write(data);
Bitmap bm = BitmapFactory.decodeFile(fileName);
Matrix matrix = new Matrix();
matrix.postRotate(180);
Bitmap rotatedBitmap = Bitmap.createBitmap(bm, 0, 0,
bm.getWidth(), bm.getHeight(), matrix, false);
rotatedBitmap.compress(CompressFormat.JPEG, 100, fos);
fos.close();
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}``
【问题讨论】:
-
but nothing works。请更好地解释发生了什么。fos = new FileOutputStream(fileName);。此时该文件被删除并设置为大小 0。fos.write(data);这里发生了什么?Bitmap bm = BitmapFactory.decodeFile(fileName);。你在这里加载那个空文件。更好:把Bitmap bm = BitmapFactory.decodeFile(fileName); as first statement. -
我现在看到,也许您首先尝试将数据中的位图保存到文件中,然后将文件加载为位图,旋转它并再次保存。那么这个方法只有在你放一个 fos.close(); 时才能工作。在使用 decodeFile() 之前。然后在旋转之后你应该创建一个新的 FileOutputStream。但是为什么不在保存前旋转位图呢?