我正在使用 OpenCV,face recognizer project example一个,由 Robotic Apps 团队制作,适用于 Android,但相机并不像预期的那样,旋转有错误,为了旋转相机 View 以在纵向方向使用,我们必须旋转内部的 Canvas CameraBridgeViewBase class 在 deliverAndDrawFrame method 中,我有下一个 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); 它返回按预期旋转 90 度的图像,但是当我旋转大于 90 度或小于 90 度时,例如 0 , -90, 180, 270, 等等。返回黑色图像 :(
这段代码有什么问题?
最佳答案
是关于坐标系的。 Canvas 属性的填充样式默认为:“黑色”。由于您的图像脱离了场景,因此您的图像是黑色的。 在您的情况下,您正在围绕 (0,0) 旋转它。您应该将图像的原点更改为图像的中间(宽度/2,高度/2)。
关于android - Canvas 在旋转时返回黑色图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38187702/