安卓:位图旋转导致黑色背景

3

我遇到了一个与位图旋转有关的问题,问题是以下代码可以将位图旋转,但在将旋转后的位图绘制在画布上时会出现黑色背景。我发现这只会出现在5.0版本以上,在4.0版本中,我可以得到透明的背景... 请分享任何线索。

            int resID = context.getResources().getIdentifier(mDrawableName,
                    "drawable", context.getPackageName());
            Matrix mat = new Matrix();
            mat.postRotate(i*6%30); // angle to be rotated
            Bitmap Logobm =  BitmapFactory.decodeResource(context.getResources(), resID) ;
            Logobm = Density.getInstance().scaleit(Logobm,
                    Density.getInstance().getPixelforDP(80), 0);
            Logobm = Bitmap.createBitmap(Logobm, 0, 0, Logobm.getWidth(), Logobm.getHeight(), mat, true);
1个回答

3

我也遇到了这个问题。在查找谷歌后,发现如果您使用 BitmapFactory.decodeResource,则该问题无法解决某些设备上的问题。因此,我选择使用以下代码替换 BitmapFactory.decodeResource:

Bitmap bitmap = yourBitmap;
Matrix matrix = new Matrix();
matrix.postRotate(angle);

Rect srcR = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
RectF dstR = new RectF(0, 0, bitmap.getWidth(), bitmap.getHeight());
RectF deviceR = new RectF();
matrix.mapRect(deviceR, dstR);

int neww = Math.round(deviceR.width());
int newh = Math.round(deviceR.height());

Bitmap result = Bitmap.createBitmap(neww, newh, Bitmap.Config.ARGB_8888);
result.eraseColor(Color.TRANSPARENT);
Canvas canvas = new Canvas();
canvas.translate(-deviceR.left, -deviceR.top);
canvas.concat(matrix);

Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setFilterBitmap(true);
canvas.setBitmap(result);
canvas.drawBitmap(bitmap, srcR, dstR, paint);
canvas.setBitmap(null);

"result"位图是您旋转后具有透明背景的位图。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接