#android #canvas #android-canvas #transformation
#Android #холст #android-холст #преобразование
Вопрос:
Я пытаюсь дополнительно обработать изображение Camera2. Поскольку камеры в устройствах имеют разные повороты и переворачиваются в зависимости от задней и передней камеры, я использую преобразования для правильного поворота. transformationMatrix
это та матрица для фронтальной камеры, которая имеет поворот 270.
Затем из этого преобразованного изображения с камеры я хочу скопировать окно прокрутки в другое растровое изображение. Я хочу сохранить это растровое изображение / состояние и нарисовать линию перед рисованием finalBitmapWithScanner
на экране телефона.
Есть ли способ сделать это более эффективно и быстро? second line
Для завершения требуется 200 мс, что является основной проблемой здесь.
Canvas canvas = new Canvas(tempBitmap);
canvas.drawBitmap(cameraBitmap, transformationMatrix, paint); // <= 200ms
Rect src = new Rect((int) lastXPos, 0, (int) mXPos, mViewHeight);
Canvas canvas2 = new Canvas(finalBitmap);
canvas2.drawBitmap(tempBitmap, src, src, paint);
Canvas canvas3 = new Canvas(finalBitmapWithScanner);
canvas3.drawBitmap(finalBitmap, 0, 0, paint);
canvas3.drawLine(mXPos, 0, mXPos, mViewHeight/2, scrollerPaint);
transformationMatrix.reset();
transformationMatrix.setRotate(270, imageHeight, 0);
transformationMatrix.postTranslate(-imageHeight, 0);
transformationMatrix.postScale(scaleFactor, scaleFactor);
transformationMatrix.postScale(-1f, 1f, mViewWidth / 2f, mViewHeight / 2f);
Ответ №1:
Есть несколько способов добиться быстрого рендеринга:
- Вы можете передать параметры «paint» равным нулю.
- также вы можете использовать функцию createScaledBitmap и заметить, что перед рендерингом необходимо установить масштаб и размер, как показано Ниже:
Как вы можете видеть в документации, введите описание ссылки здесь; вам нужно изменить размер и масштаб вашего растрового изображения перед рендерингом, чтобы вы могли использовать приведенный ниже код для вашего BitmapFactory.Опции :
mBitmapOptions.inScaled = true;
mBitmapOptions.inDensity = srcWidth;
mBitmapOptions.inTargetDensity = dstWidth;
// will load amp; resize the image to be 1/inSampleSize dimensions
mCurrentBitmap = BitmapFactory.decodeResources(getResources(),
mImageIDs, mBitmapOptions);
- используйте canvas.restore() после функции рисования.