Created
October 18, 2016 03:01
-
-
Save NightlyNexus/1a767caee9940738867f5eb02003514b to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import android.graphics.Color; | |
public final class ColorUtils { | |
public static boolean useLightOnPrimaryColor(int color) { | |
return computeContrastBetweenColors(color, Color.WHITE) > 3f; | |
} | |
/** | |
* Copyright (C) 2014 The Android Open Source Project | |
* Calculates the contrast between two colors, using the algorithm provided by the WCAG v2. | |
*/ | |
private static float computeContrastBetweenColors(int bg, int fg) { | |
float bgR = Color.red(bg) / 255f; | |
float bgG = Color.green(bg) / 255f; | |
float bgB = Color.blue(bg) / 255f; | |
bgR = (bgR < 0.03928f) ? bgR / 12.92f : (float) Math.pow((bgR + 0.055f) / 1.055f, 2.4f); | |
bgG = (bgG < 0.03928f) ? bgG / 12.92f : (float) Math.pow((bgG + 0.055f) / 1.055f, 2.4f); | |
bgB = (bgB < 0.03928f) ? bgB / 12.92f : (float) Math.pow((bgB + 0.055f) / 1.055f, 2.4f); | |
float bgL = 0.2126f * bgR + 0.7152f * bgG + 0.0722f * bgB; | |
float fgR = Color.red(fg) / 255f; | |
float fgG = Color.green(fg) / 255f; | |
float fgB = Color.blue(fg) / 255f; | |
fgR = (fgR < 0.03928f) ? fgR / 12.92f : (float) Math.pow((fgR + 0.055f) / 1.055f, 2.4f); | |
fgG = (fgG < 0.03928f) ? fgG / 12.92f : (float) Math.pow((fgG + 0.055f) / 1.055f, 2.4f); | |
fgB = (fgB < 0.03928f) ? fgB / 12.92f : (float) Math.pow((fgB + 0.055f) / 1.055f, 2.4f); | |
float fgL = 0.2126f * fgR + 0.7152f * fgG + 0.0722f * fgB; | |
return Math.abs((fgL + 0.05f) / (bgL + 0.05f)); | |
} | |
private ColorUtils() { | |
throw new AssertionError("No instances."); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment