Pixl – Biblioteca de manipulación de imágenes de Android según JIBRAN Octubre de 2020

Una foto de Angela Compagnone en Unsplash

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:

Youtube – https://www.youtube.com/watch?v=eebG8SMYD20

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *