这是我的代码。这个问题与此问题有些相关:Trying to scale down a Bitmap in Android not working
我评论了options.inSampleSize
,我仍然得到了旋转(逆时针90度似乎)。这似乎是一个相当简单的缩小图像,从谷歌文档,我不知道我是如何得到一个旋转的图像。
Bitmap myBitmap = null;
@Override
protected byte[] doInBackground(Object... params) {
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
//myImageByteArray is 4016 wide
myBitmap = BitmapFactory.decodeByteArray(myImageByteArray, 0, myImageByteArray.length, options);
if (options.outHeight > options.outWidth) {
//options.inSampleSize = calculateInSampleSize(options, 640, 960);
} else {
//options.inSampleSize = calculateInSampleSize(options, 960, 640);
}
options.inJustDecodeBounds = false;
//myImageByteArray is 4016 wide
myBitmap = BitmapFactory.decodeByteArray(myImageByteArray, 0, myImageByteArray.length, options);
//This log statement outputs around 1000 now.
Log.d("bitmap", myBitmap.getWidth()+"");
ByteArrayOutputStream bAOS = new ByteArrayOutputStream();
myBitmap.compress(CompressFormat.JPEG, 50, bAOS);
}
字节[]最初来自Commonsware CWAC Camera library,我试过看一下:Android Reduce Size Of Camera Picture
我已经开始提取更多代码,试图让这种轮换来自哪里更加明显。我把它缩小到了这个范围。 (此代码仍会导致旋转)
Bitmap myBitmap = null;
@Override
protected byte[] doInBackground(Object... params) {
final BitmapFactory.Options options = new BitmapFactory.Options();
myBitmap = BitmapFactory.decodeByteArray(myImageByteArray, 0, myImageByteArray.length, options);
ByteArrayOutputStream bAOS = new ByteArrayOutputStream();
myBitmap.compress(CompressFormat.JPEG, 50, bAOS);
}
答案 0 :(得分:0)
这里的问题很可能是图像本身没有被旋转,但图像是通过旋转显示的,并且您的变换正在清除(或者至少不会继续)操作系统将使用的元数据显示它正确的方向。关于这一点,你没有太多可以做的,因为操作系统不会将这些数据放在图像本身中
如果情况并非如此,那么你所拥有的是字节顺序问题。一种格式是从左到右为您提供数据,另一种格式是从上到下。您需要重新排序字节。