Canvas returns 旋转时黑色图像

Canvas returns black image on rotate

我正在使用 OpenCVface recognizer project example,由 Robotic Apps 团队制作,用于 Android,但相机并不像预期的那样,旋转有错误,为了旋转相机视图以在纵向方向使用,我们必须旋转 CameraBridgeViewBase 内部的 canvas classdeliverAndDrawFrame方法中,我有下一个canvas旋转方法:

canvas.drawColor(0, android.graphics.PorterDuff.Mode.CLEAR);
canvas.rotate(180);
mScale = canvas.getWidth() / (float) mCacheBitmap.getHeight();
float scale2 = canvas.getHeight() / (float) mCacheBitmap.getWidth();
if (scale2 > mScale) {
    mScale = scale2;
}
if (mScale != 0) {
     canvas.scale(mScale, mScale, 0, 0);
}
Log.d(TAG, "mStretch value: " + mScale);
canvas.drawBitmap(mCacheBitmap, 0, -mCacheBitmap.getHeight(), null);
// ...

当我使用值为 90 的旋转方法时 canvas.rotate(90); 它 returns 图像按预期旋转了 90 度,但是当我旋转大于 90 度或小于 90 度,例如 0、-90、180、270 等。它returns 黑色图像 :(

这段代码有什么问题?

是关于坐标系的。 Canvas 属性 具有默认的填充样式:"black"。由于您的图像脱离了场景,因此您的图像是黑色的。 在您的情况下,您正在围绕 (0,0) 旋转它。您应该将图片的原点更改为图片的中间位置(width/2,height/2).