Как эффективно изменить захваченные байты с камеры? - PullRequest
1 голос
/ 29 февраля 2012

Я рисую наложение на изображение с камеры и сохраняю результат в файл. Для этого я передаю обратный вызов, содержащий приведенный ниже код, в 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 Ответ

1 голос
/ 29 февраля 2012

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

...