【问题标题】:Android: bitmap rotation leads to black backgroundAndroid:位图旋转导致黑色背景
【发布时间】:2016-08-10 17:06:05
【问题描述】:

我遇到了与位图旋转有关的问题,问题是跟随代码可以很好地旋转位图,但在画布上绘制旋转位图时有一个背景,我只看到 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);

【问题讨论】:

    标签: android


    【解决方案1】:

    我也遇到了这个问题。在 Goolge 之后,我发现如果你使用 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);
    

    “结果”位图是带有透明背景的旋转位图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-15
      • 1970-01-01
      • 2014-02-20
      • 1970-01-01
      • 1970-01-01
      • 2018-12-03
      • 1970-01-01
      相关资源
      最近更新 更多