1

我正在制作一个视频会议应用程序。

在 NDK 方面,我从解码器中获得了 YUV420 中的图像,因此我使用http://wss.co.uk/pinknoise/yuv2rgb/将其转换为 RGB8888 到 Android 位图。

然后我将位图打印到表面视图中。
一切正常,我很高兴。

现在我正在尝试使用纹理视图而不是表面视图(以简化视图层次结构/合成)。我有一个非常奇怪的结果:只有我的位图的最后一个像素被渲染。并且它们被渲染到位。

Canvas canvas = lockCanvas();
if (canvas == null)
    return ;

canvas.drawRGB(0, 0, 0);
canvas.save();
canvas.drawBitmap(bitmap, 0, 0, null);
canvas.restore();
unlockCanvasAndPost(canvas);

虽然纹理视图应该呈现:

|------------------|
|xxxxxx            |
|xxxxxx            |
|xxxxxx            |
|                  |
|                  |
|------------------|

这就是它呈现的内容。

|------------------|
|    xx            |
|    xx            |
|    xx            |
|                  |
|                  |
|------------------|

最奇怪的是,那两个像素列是正确的。它们是位图每一行的最后两个像素。它们在正确的位置正确呈现。

这是一个已知的错误吗?

有什么我做错了吗?

4

1 回答 1

0

看来这是每个像素的 alpha 分量的问题。

调用setHasAlpha(false)位图解决了这个问题。

于 2013-12-17T14:49:11.503 回答