在缩放之后,我的位图在Android中旋转

时间:2014-01-10 16:50:08

标签: java android bitmap android-bitmap commonsware-cwac

这是我的代码。这个问题与此问题有些相关: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

UPDATE:

我已经开始提取更多代码,试图让这种轮换来自哪里更加明显。我把它缩小到了这个范围。 (此代码仍会导致旋转)

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);

}

1 个答案:

答案 0 :(得分:0)

这里的问题很可能是图像本身没有被旋转,但图像是通过旋转显示的,并且您的变换正在清除(或者至少不会继续)操作系统将使用的元数据显示它正确的方向。关于这一点,你没有太多可以做的,因为操作系统不会将这些数据放在图像本身中

如果情况并非如此,那么你所拥有的是字节顺序问题。一种格式是从左到右为您提供数据,另一种格式是从上到下。您需要重新排序字节。