android - Canvas 在旋转时返回黑色图像

标签 android opencv canvas image-rotation

我正在使用 OpenCVface recognizer project example一个,由 Robotic Apps 团队制作,适用于 Android,但相机并不像预期的那样,旋转有错误,为了旋转相机 View 以在纵向方向使用,我们必须旋转内部的 Canvas CameraBridgeViewBase classdeliverAndDrawFrame 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/

相关文章:

python - 警告 :0 terminating async callback error in cv2

macos - zlib OpenCV 2.4.5 Mac OSX中的编译错误

html - 移动 Canvas 图案的起始位置

javascript - 获取输入值并使用两个参数插入函数以制作矩形?

java - 为什么我的 libgdx java 桌面应用程序的高度不正确?

Android - WLAN 和 3G 连接之间的差异

android - 无法获取 GED Log Buf,err(0)

java - 为什么我的 onPrepareOptionsMenu 没有被调用?

opencv - HAAR 分类器说明

javascript - vanilla JS 中的构造函数、循环和数组练习