2016-11-14 95 views
0

我将从相机检索到的每个帧转换为位图,并将其显示在ImageView上,但我发现imageView包含旋转的位图,所以我想旋转位图90度来设置它对。要实现这一目标, 我写了下面的代码将旋转位图90度,但在运行时我收到位图旋转导致错误

bitmap size exceeds 32bits 

我提到一些岗位来解决这个问题,其中一个建议回收使用的每个位图,但它并没有解决问题。 请让我知道为什么我得到这个错误以及如何解决它?

代码

@Override 
protected void onProgressUpdate(Bitmap... values) { 
     super.onProgressUpdate(values); 

     Bitmap b = values[0]; 

     Matrix matrix = new Matrix(); 
     matrix.postScale(b.getWidth()-10, b.getHeight()-10); 
     matrix.postRotate(90); 

     Bitmap resizedBitmap = Bitmap.createBitmap(b, 0, 0, b.getWidth(), b.getHeight(), matrix, true); 

     mIVEdges.setImageBitmap(resizedBitmap); 

     b.recycle(); 
    } 
+0

你真的需要'onProgressUpdate旋转图像()'不'doInBackground()' ?如果 - 是 - 可能是'publishProgress()'调用经常创建的许多新的'resizedBitmap'。 –

回答

0

如果你有100×100像素的位图,然后

matrix.postScale(b.getWidth()-10, b.getHeight()-10); 

会造成新的位图与90的比例因子进行缩放。

matrix.postScale(90, 90); 

所以新的位图的输出是9000x9000像素。

如果你想减少新位图的大小,要使用比例因子> 0.0和< 1.0

matrix.postScale(0.9f, 0.9f); 
+0

ok',如果我想要保持相同大小的位图,应该是matrix.postScale(1f,1f) – user2121

+0

是的。要保持相同的位图大小,您需要使用比例因子1.0 –