有没有办法旋转字节数组而不将其解码为Bitmap?
目前在jpeg PictureCallback中我只是将字节数组直接写入文件。但图片是旋转的。我想旋转它们而不解码到位图,希望这样可以节省我的记忆。
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeByteArray(data, 0, data.length, o);
int orientation;
if (o.outHeight < o.outWidth) {
orientation = 90;
} else {
orientation = 0;
}
File photo = new File(tmp, "demo.jpeg");
FileOutputStream fos;
BufferedOutputStream bos = null;
try {
fos = new FileOutputStream(photo);
bos = new BufferedOutputStream(fos);
bos.write(data);
bos.flush();
} catch (IOException e) {
Log.e(TAG, "Failed to save photo", e);
} finally {
IOUtils.closeQuietly(bos);
}
答案 0 :(得分:3)
您可以通过Exif标头设置JPEG旋转而不进行解码。这是最有效的方法,但有些观看者可能仍会显示旋转的图像。
或者,您可以使用JPEG lossless rotation。 不幸的是,我不知道这种算法的免费Java实现。
答案 1 :(得分:2)
我认为没有这种可能性。字节顺序取决于图片编码(png,jpeg)。所以你被迫解码图像来做一些事情。
答案 2 :(得分:1)
试试这个。它将解决目的。
Bitmap storedBitmap = BitmapFactory.decodeByteArray(data, 0, data.length, null); Matrix mat = new Matrix(); mat.postRotate("angle"); // angle is the desired angle you wish to rotate storedBitmap = Bitmap.createBitmap(storedBitmap, 0, 0, storedBitmap.getWidth(), storedBitmap.getHeight(), mat, true);