Example usage for android.graphics Color HSVToColor

List of usage examples for android.graphics Color HSVToColor

Introduction

In this page you can find the example usage for android.graphics Color HSVToColor.

Prototype

@ColorInt
public static int HSVToColor(@Size(3) float hsv[]) 

Source Link

Document

Convert HSV components to an ARGB color.

Usage

From source file:com.creativeongreen.imageeffects.MainActivity.java

public static Bitmap getCartoonizedBitmap(Bitmap realBitmap, Bitmap dodgeBlendBitmap, int hueIntervalSize,
        int saturationIntervalSize, int valueIntervalSize, int saturationPercent, int valuePercent) {
    // Bitmap bitmap = Bitmap.createBitmap(scaledBitmap);
    // //fastblur(scaledBitmap, 4);
    Bitmap base = fastblur(realBitmap, 3).copy(Config.ARGB_8888, true);
    Bitmap dodge = dodgeBlendBitmap.copy(Config.ARGB_8888, false);
    try {/*  w ww. j a  v  a  2  s .c  o  m*/
        int realColor;
        int color;
        float top = 0.87f;// VALUE_TOP; // Between 0.0f .. 1.0f I use 0.87f
        IntBuffer templatePixels = IntBuffer.allocate(dodge.getWidth() * dodge.getHeight());
        IntBuffer scaledPixels = IntBuffer.allocate(base.getWidth() * base.getHeight());
        IntBuffer buffOut = IntBuffer.allocate(base.getWidth() * base.getHeight());

        base.copyPixelsToBuffer(scaledPixels);
        dodge.copyPixelsToBuffer(templatePixels);

        templatePixels.rewind();
        scaledPixels.rewind();
        buffOut.rewind();

        while (buffOut.position() < buffOut.limit()) {
            color = (templatePixels.get());
            realColor = scaledPixels.get();

            float[] realHSV = new float[3];
            Color.colorToHSV(realColor, realHSV);

            realHSV[0] = getRoundedValue(realHSV[0], hueIntervalSize);

            realHSV[2] = (getRoundedValue(realHSV[2] * 100, valueIntervalSize) / 100) * (valuePercent / 100);
            realHSV[2] = realHSV[2] < 1.0 ? realHSV[2] : 1.0f;

            realHSV[1] = realHSV[1] * (saturationPercent / 100);
            realHSV[1] = realHSV[1] < 1.0 ? realHSV[1] : 1.0f;

            float[] HSV = new float[3];
            Color.colorToHSV(color, HSV);

            boolean putBlackPixel = HSV[2] <= top;

            realColor = Color.HSVToColor(realHSV);

            if (putBlackPixel) {
                buffOut.put(color);
            } else {
                buffOut.put(realColor);
            }
        } // END WHILE
        dodge.recycle();
        buffOut.rewind();
        base.copyPixelsFromBuffer(buffOut);

    } catch (Exception e) {
        // TODO: handle exception
    }

    return base;
}