Проблема с растровым изображением Android - PullRequest
0 голосов
/ 13 августа 2011

У меня есть поток JPEG-движения, который помещается на холст в Android. Моя проблема в том, что в правом нижнем углу холста есть маленькая серая полоска с точками. Это как бы исчезает и вновь появляется. У меня нет этой проблемы на других платформах, которые используют тот же поток, поэтому я предполагаю, что это проблема Android. Вот мой код:

Canvas canvas = null;
            try
            {

                Bitmap bmp = BitmapFactory.decodeByteArray(notifi.imgData, 0, notifi.imgData.length);
                if (bmp == null)
                    System.out.println("Skipping invalid MJpeg frame");
                else
                {
                    canvas = holder.lockCanvas(null);
                    if (canvas == null)
                    {
                        System.out.println("Cannot lock canvas, skipping MJpeg frame");
                        return;
                    }
                    canvas.drawColor(Color.BLACK);

                    Rect dst = null;
                    int viewWidth = mPreview.getWidth();
                    int viewHeight = mPreview.getHeight();
                    float ratio = bmp.getWidth() / (float)bmp.getHeight();
                    int desiredHeight = (int)(viewWidth / ratio);
                    if (desiredHeight > viewHeight)
                    {   // Letterbox
                        int maxWidth = (int)(viewHeight * ratio);
                        int pad = (viewWidth - maxWidth) / 2;
                        dst = new Rect(pad, 0, maxWidth + pad, viewHeight);
                    }
                    else
                    {
                        int pad = (viewHeight - desiredHeight) / 2;
                        dst = new Rect(0, pad, viewWidth, desiredHeight + pad);
                    }

                    canvas.drawBitmap(bmp, null, dst, null);
                }
            } finally {
                if (canvas != null)
                    holder.unlockCanvasAndPost(canvas);
            }
        }
        });

Ответы [ 2 ]

0 голосов
/ 13 августа 2011

Я заметил, что вы добавляете "Pad" в прямоугольник назначения, чтобы изменить его высоту.

Если вы сделаете это, мне будет интересно, будет ли размер прямоугольника назначения соответствовать размеру изображения, которое вы рисуете, и, таким образом, «перерисовать» некоторую серую полосу, как вы видите. Просто предположение - может быть, если вы уберете подушку высоты, она исчезнет? Просто предположение.

dst = new Rect(0, pad, viewWidth, desiredHeight + pad);
canvas.drawBitmap(bmp, null, dst, null);
0 голосов
/ 13 августа 2011

canvas = holder.lockCanvas(null); выглядит подозрительно.

Попробуйте canvas = holder.lockCanvas();.

...