Code pull completed, the page will refresh automatically
@Автор 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
}
You can comment after Login
Inappropriate content may be displayed here and will not be shown on the page. You can check and modify it through the relevant editing function
If you confirm that the content does not involve inappropriate language/advertisement redirection/violence/vulgar pornography/infringement/piracy/false/insignificant or illegal content related to national laws and regulations, you can click submit to make an appeal, and we will handle it as soon as possible.
Comments ( 0 )