나는 안드로이드에서 캔버스에 찍힌 모션 JPEG 스트림을 가지고있다. 내 문제는 캔버스의 오른쪽 하단에 약간 회색의 픽셀 막대가 있다는 것입니다. 그것은 다소 사라지고 다시 나타납니다. 동일한 스트림을 사용하는 다른 플랫폼에서이 문제가 발생하지 않으므로 안드로이드 문제를 짐작할 수 있습니다. 내 코드는 다음과 같습니다.안드로이드 비트 맵 문제
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);
}
}
});
패딩이 적절한 높이를 제공합니다. 이 작은 회색의 "막대"는 jpeg의 전체 너비를 덮지 않습니다. 그것의 오른쪽 하단 모서리와 그것의 흔적 끝은 pixelated입니다. BitmapFactory 옵션이 도움이 될 수 있습니까? – spentak