我使用OpenCV,人脸识别项目的例子之一,由机器人应用程序团队,为Android,但相机不像预期的那样,旋转有bug,为了旋转相机视图在纵向方向使用,我们必须旋转画布内的CameraBridgeViewBase类在deliverAndDrawFrame方法,我有下一个画布旋转方法:
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的rotate方法canvas.rotate(90);它返回图像按预期旋转90度,但当我旋转超过90度或小于90度时,如0,-90,180,270等它返回黑色图像:(
这段代码有什么问题?
是关于坐标系的。画布属性有一个默认的填充样式:"黑色"。因为你的图像离开了场景,你就有了一个黑色的图像。在这种情况下,你绕(0,0)旋转。你应该改变你的图像的原点为图像的中间(宽度/2,高度/2)。