2012-02-29 5 views
1

Я рисую наложение на изображение с камеры и сохраняю результат в файл. Чтобы сделать это, я передаю обратный вызов, содержащий код ниже, для takePicture(). При больших размерах изображений, я получаю сбои с OutOfMemoryError в первой строке метода.Как эффективно изменять захваченные байты с камеры?

Есть ли способ сделать это более эффективно? Похоже, что невозможно сделать измененный битмап из байта [], что сразу удваивает использование памяти. Если это невозможно сделать при высоких разрешениях, как может Я создаю наложение на большом захваченном изображении без исчерпания памяти?

public void onPictureTaken(byte[] rawPlainImage, Camera camera) { 
    Bitmap plainImage = BitmapFactory.decodeByteArray(rawPlainImage, 0, rawPlainImage.length); 
    plainImage = plainImage.copy(plainImage.getConfig(), true); 
    Canvas combinedImage = new Canvas(plainImage); 
    combinedImage.drawBitmap(mOverlay, mOverlayTransformation, null); 
    //Write plainImage (now modified) out to a file 
    plainImage.recycle(); 
} 

ответ

1

Вы действительно не нуждаетесь в декодировании изображения. Вместо этого нарисуйте наложение на холст, сохраните холст в виде растрового изображения, преобразуйте это растровое изображение в массив байтов, а затем объедините массив байтов холста и растровое изображение, а затем сохраните его.