【问题标题】:Canvas returns black image on rotate画布在旋转时返回黑色图像
【发布时间】:2016-11-06 08:41:28
【问题描述】:

我正在使用 OpenCVface recognizer project example,由 Robotic Apps 团队为 Android 制作,但摄像头不如预期,旋转有错误和为了旋转相机视图以用于纵向,我们必须在 deliverAndDrawFrame 中旋转 CameraBridgeViewBase class 内的画布方法,我有下一个画布旋转方法:

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 等 返回黑色图像 :(

这段代码有什么问题?

【问题讨论】:

    标签: android opencv canvas image-rotation


    【解决方案1】:

    这是关于协调系统的。画布属性有一个填充样式默认值:“黑色”。由于您的图像离开了场景,因此您的图像是黑色的。 在您的情况下,您正在围绕(0,0)旋转它。您应该将图像的原点更改为图像的中间(宽度/2,高度/2)。

    【讨论】:

    • 没错,图片超出了画布区域。
    • 我在同一天修复了它,但我忘了发布答案,这就是解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    • 2016-03-13
    • 2015-10-01
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多