Logo

dev-resources.site

for different kinds of informations.

Como extrair cores de uma imagem no Android Studio

Published at
12/27/2023
Categories
android
palette
ui
kotlin
Author
richard_natan
Categories
4 categories in total
android
open
palette
open
ui
open
kotlin
open
Author
13 person written this
richard_natan
open
Como extrair cores de uma imagem no Android Studio

Olá pessoal, tudo bem? neste blog irei explicar como obter as cores de um bitmap no Android utilizando o Kotlin. Espero que tenha alguma serventia para você!

Dependências

Para buscar as cores iremos utilizar a biblioteca Palette do Jetpack. Para começar iremos declarar dentro do build.gradle(app):

// Groovy
dependencies {
    ...
    implementation 'androidx.palette:palette:1.0.0'
}
Enter fullscreen mode Exit fullscreen mode

Ou:

// Kotlin
dependencies {
    ...
    implementation("androidx.palette:palette:1.0.0")
}
Enter fullscreen mode Exit fullscreen mode

Criar um Layout XML

Estarei utilizando o seguinte layout XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <com.google.android.material.card.MaterialCardView
        android:layout_width="380dp"
        android:layout_height="270dp">

        <ImageView
            android:id="@+id/photo"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:src="@drawable/photo" />

    </com.google.android.material.card.MaterialCardView>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Mount Fuji"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="150dp"
        android:layout_margin="10dp">

        <TextView
            android:id="@+id/txt_light_vibranty"
            android:layout_width="100dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:text="Light Vibranty"
            android:textColor="@color/white" />

        <TextView
            android:id="@+id/txt_vibranty"
            android:layout_width="100dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:text="Vibranty"
            android:textColor="@color/white" />

        <TextView
            android:id="@+id/txt_dark_vibranty"
            android:layout_width="100dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:text="Dark Vibranty"
            android:textColor="@color/white" />

        <TextView
            android:id="@+id/txt_light_muted"
            android:layout_width="100dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:text="Light Muted"
            android:textColor="@color/white" />

        <TextView
            android:id="@+id/txt_muted"
            android:layout_width="100dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:text="Muted"
            android:textColor="@color/white" />

        <TextView
            android:id="@+id/txt_dark_muted"
            android:layout_width="100dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:text="Dark Muted"
            android:textColor="@color/white" />

    </LinearLayout>

</LinearLayout>
Enter fullscreen mode Exit fullscreen mode

Criar paleta de cores

Para extrair as cores vamos criar uma função que recebe um ImageView ou um Bitmap se você possuir uma imagem que vem de uma API.

 fun createPalette(image: ImageView) {
        // Este linha é para converter o drawable do imageView 
        // para bitmap
        val bitmap = image.drawable.toBitmap()

        val palette = Palette.from(bitmap).generate()

        view.showColors(palette)
    }
Enter fullscreen mode Exit fullscreen mode

Extrair cores da paleta

Para Extrair as cores criadas podemos criar uma função:

fun showColors(response: Palette) {
        txtLightVibranty.setBackgroundColor(response.lightVibrantSwatch?.rgb ?: R.color.white)
        txtVibranty.setBackgroundColor(response.vibrantSwatch?.rgb ?: R.color.white)
        txtDarkVibranty.setBackgroundColor(response.darkVibrantSwatch?.rgb ?: R.color.white)
        txtLightMuted.setBackgroundColor(response.lightMutedSwatch?.rgb ?: R.color.white)
        txtMuted.setBackgroundColor(response.mutedSwatch?.rgb ?: R.color.white)
        txtDarkMuted.setBackgroundColor(response.darkMutedSwatch?.rgb ?: R.color.white)
    }
Enter fullscreen mode Exit fullscreen mode

Utilizamos o response.{nome da cor}?.rgb e definimos uma cor padrão caso seja nulo utilizando o operador elvis: ?: R.color.{cor padrão}.

Finalização

Resultado final:
Resultado

Este é o método mais simples e direto de se extrair cores de uma foto, espero que eu tenha lhe ajudado. Até a próxima!

Featured ones: