1 Star 0 Fork 0

OSCHINA-MIRROR/madaigou-BeautyCamera

Join Gitlife
Discover and participate in excellent open source projects with over 10 million developers. Private repositories are also completely free :)
Join for free
Clone/Download
Contribute code
Sync code
Cancel
Hint: Since Git does not support empty folders, creating a folder will generate an empty .keep file.
Loading...
README.md

BeautyCamera

Проект: «Одно нажатие — и камера сделает вас красивым»

@Автор GQ, 23 июня 2018 года

В этом проекте используется функция водяной знак камеры. Также добавлена функция красоты. В процессе реализации были изучены некоторые документы по фильтрам изображений GPUImage.

Ссылки на источники:

Эффектные изображения

1 2 3

Реализация предварительного просмотра с использованием фильтров GPUImage

  • Фильтр красоты:
gpuImage = GPUImage(this)
gpuImage?.setGLSurfaceView(surfaceView)

magicFilterGroup = GPUImageFilterGroup()
magicFilterGroup?.addFilter(GPUImageBeautyFilter())

noMagicFilterGroup = GPUImageFilterGroup()
noMagicFilterGroup?.addFilter(GPUImageFilter())

// Установка фильтра
gpuImage?.setFilter(if (isInMagic) magicFilterGroup else noMagicFilterGroup)
  • Использование GLSurfaceView для отображения предварительного просмотра:
<android.opengl.GLSurfaceView
        android:id="@+id/surfaceView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
  • Установка размера изображения:
parameters.setPictureSize(pictureSize.width, pictureSize.height)
  • Настройка размера предварительного просмотра:
parameters.setPreviewSize(closelySize.width, closelySize.height)
  • Непрерывная фокусировка:
// Непрерывная фокусировка
if (parameters.supportedFocusModes.contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE)) {
    parameters.focusMode = Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE
}

Использование Camera.parameters для настройки

  • Проблемы деформации предварительного просмотра при разных разрешениях;
  • Адаптация разрешения предварительного просмотра к разрешению фотографии;
  • Разрешение передней и задней камер.

Установка водяного знака

  • Метод 1: использование canvas для повторного рисования исходного изображения и изображения водяного знака.
// Водяной знак имеет разный размер при разных разрешениях (пока не решено)
private fun getView2Bitmap(): Bitmap {
    ll_waterMarker!!.isDrawingCacheEnabled = true
    var waterBitmapCache = ll_waterMarker.drawingCache
    var waterBitmap = Bitmap.createBitmap(waterBitmapCache, 0, 0, ll_waterMarker.width, ll_waterMarker.height)
    ll_waterMarker.destroyDrawingCache()
    var oriBitmap = (iv_img.drawable as BitmapDrawable).bitmap
    var newb = Bitmap.createBitmap(oriBitmap.width, oriBitmap.height, Bitmap.Config.ARGB_8888);
    var canvas = Canvas(newb)
    canvas.drawBitmap(oriBitmap, 0f, 0f, null)
    canvas.drawBitmap(waterBitmap, 0f, (oriBitmap.height - waterBitmap.height).toFloat() - SizeUtil.dp2px(this, 40f), null)
    canvas.save(Canvas.ALL_SAVE_FLAG);
    canvas.restore();
    return newb
}
  • Способ 2: обрезка Layout для сохранения изображения с водяным знаком.
// Обрезка layout для сохранения фотографии, будет чёрная рамка
private fun getScreenPhoto(waterPhoto: RelativeLayout?): Bitmap {
    waterPhoto!!.isDrawingCacheEnabled = true
    waterPhoto.buildDrawingCache()
    var bitmap: Bitmap? = waterPhoto.drawingCache
    val width = waterPhoto.width
    val height = waterPhoto.height
    val bitmap1 = Bitmap.createBitmap(bitmap!!, 0, 0, width, height)
    waterPhoto.destroyDrawingCache()
return bitmap1
}

Подробнее см. в демо https://gitee.com/madaigou/BeautyCamera.

Comments ( 0 )

You can comment after Login

Introduction

No description available Expand Collapse
Apache-2.0
Cancel

Releases

No releases yet

Contributor

All

Recent Activities

Load more
No more results to load
1
https://gitlife.ru/oschina-mirror/madaigou-BeautyCamera.git
git@gitlife.ru:oschina-mirror/madaigou-BeautyCamera.git
oschina-mirror
madaigou-BeautyCamera
madaigou-BeautyCamera
master