水平翻转位图并绘制到画布的特定部分

时间:2015-10-31 08:50:44

标签: android canvas matrix bitmap

如何在完全相同的位置将此位图绘制到画布,但水平翻转?矩阵文档并不完全冗长。这是最初的图纸:

canvas.DrawBitmap (_ballBmpRight, ParentView._ballX, ParentView._ballY, null);

我尝试翻转位图:

flipHorizontalMatrix = new Matrix();
            flipHorizontalMatrix.SetScale(-1,1);
            flipHorizontalMatrix.PostTranslate(_ballBmpRight.Width, 0); 

然后绘制它(这是我无法将它放在画布的正确部分的地方):

canvas.DrawBitmap (_ballBmpRight, flipHorizontalMatrix,  null);

1 个答案:

答案 0 :(得分:0)

我最终这样做了:

BitmapDrawable flip(BitmapDrawable d)
        {
            Matrix m = new Matrix();
            m.PreScale(-1, 1);
            Bitmap src = d.Bitmap;
            Bitmap dst = Bitmap.CreateBitmap(src, 0, 0, src.Width, src.Height, m, false);
            //dst.SetDensity(DisplayMetrics.DENSITY_DEFAULT);
            return new BitmapDrawable(dst);
        }

翻转的客户端代码:

var bd = new BitmapDrawable (_ballBmpRight);
            BitmapDrawable bdFlipped = flip (bd);
            _ballBmpLeft = bdFlipped.Bitmap;

画布绘图代码:

canvas.DrawBitmap (_ballBmpLeft, ParentView._ballX, ParentView._ballY, null);

请注意,方法名称略有不同(.getBitmap()只是.Bitmap),因为我正在使用Xamarin.Android。