@Автор GQ, 23 июня 2018 года
В этом проекте используется функция водяной знак камеры. Также добавлена функция красоты. В процессе реализации были изучены некоторые документы по фильтрам изображений GPUImage.
Ссылки на источники:
- https://github.com/BradLarson/GPUImage;
- https://github.com/Dean1990/MagicCamera (этот проект не запустился — -b).
gpuImage = GPUImage(this)
gpuImage?.setGLSurfaceView(surfaceView)
magicFilterGroup = GPUImageFilterGroup()
magicFilterGroup?.addFilter(GPUImageBeautyFilter())
noMagicFilterGroup = GPUImageFilterGroup()
noMagicFilterGroup?.addFilter(GPUImageFilter())
// Установка фильтра
gpuImage?.setFilter(if (isInMagic) magicFilterGroup else noMagicFilterGroup)
<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
}
// Водяной знак имеет разный размер при разных разрешениях (пока не решено)
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
}
// Обрезка 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
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )