Hubo un momento en que estaba trabajando en una aplicación de edición de imágenes simple, pero no pude encontrar una biblioteca o API básica de Android que, a diferencia de iOS, pudiera manipular el contraste, el brillo y la nitidez de una imagen. aunque encontré muchas implementaciones de tipo salvaje (StackOverflow, GitHub) que admiten Java, eran lentas porque Java VM ** tose **, pero después de una investigación exhaustiva encontré una cosa perfecta llamada «RenderScript» que usa la capacidad realizar procesamiento a nivel de píxel en lugar de la máquina virtual nativa. pero lo encontré muy difícil porque no había documentación y muy mala.
en Finalmente, lo implemento por prueba y error usando una conferencia en YouTube y un recurso práctico de Github RenderScript.
Así que decidí crear una biblioteca y puedo proporcionar tres manipulaciones básicas de imágenes (Contraste, Brillo y Nitidez)
Dejo de hablar y aquí está el código.
Agregue Jitpack al archivo build.gradle de su proyecto
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
jcenter()
}
}
}
Luego agregue esta dependencia al archivo build.gradle de la aplicación.
dependencies {
implementation 'com.jibraniqbal.pixl:pixl:0.0.1'
}
Puede ver el ejemplo con brillo, contraste y saturación usando Seekbar, relativo a 0–100%
Para admitir API-19, agregue esto a su build.gradle
android {
defaultConfig {
...
renderscriptTargetApi 19
renderscriptSupportModeEnabled true
}
}
Inicialización
val pixl = Pixl(context)
Brillo
brightnessSeek.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
override fun onProgressChanged(p0: SeekBar?, p1: Int, p2: Boolean) {
val input = originalBrightnessImage
val output = Bitmap.createBitmap(input.width, input.height, input.config)
pixl.setBrightness(input, output, p0?.progress?.toFloat() ?: 0f)
postImage(brightnessImage, output)
}
override fun onStartTrackingTouch(p0: SeekBar?) {}
override fun onStopTrackingTouch(p0: SeekBar?) {}
})
Contraste
contrastSeek.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
override fun onProgressChanged(p0: SeekBar?, p1: Int, p2: Boolean) {
val input = originalContrastImage
val output = Bitmap.createBitmap(input.width, input.height, input.config)
pixl.setContrast(input, output, p0?.progress?.toFloat() ?: 0f)
postImage(contrastImage, output)
}
override fun onStartTrackingTouch(p0: SeekBar?) {}
override fun onStopTrackingTouch(p0: SeekBar?) {}
})
Saturación
saturationSeek.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
override fun onProgressChanged(p0: SeekBar?, p1: Int, p2: Boolean) {
val input = originalSaturationImage
val output = Bitmap.createBitmap(input.width, input.height, input.config)
pixl.setSaturation(input, output, p0?.progress?.toFloat() ?: 0f)
postImage(saturationImage, output)
}
override fun onStartTrackingTouch(p0: SeekBar?) {}
override fun onStopTrackingTouch(p0: SeekBar?) {}
})
Este código también está disponible aquí con una aplicación de muestra.
Envíenos sus comentarios y envíe el problema a GitHub si tiene alguno.
Recursos: