2013-12-16 1 views
1

Я делаю приложение для видеоконференций.Android TextureView: DrawBitmap показывает только последние 2 пикселя каждой строки

На стороне 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   | 
|     | 
|     | 
|------------------| 

И самое странное, эти два столбца пикселей правильные. Это два последних пикселя каждой строки растрового изображения. Они отображаются правильно в нужном месте.

Это известная ошибка?

Есть ли что-то, что я делаю неправильно?

ответ

0

Похоже, что это была проблема с альфа-компонентом каждого пикселя.

Вызов setHasAlpha(false) на растровое изображение исправил проблему.