Java Code Examples for android.graphics.Color#colorToHSV()

The following examples show how to use android.graphics.Color#colorToHSV() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: MainActivity.java    From SimpleDialogFragments with Apache License 2.0 6 votes vote down vote up
private void newColor(int color){
    this.color = color;

    // Sets action bar colors
    if (getSupportActionBar() == null) return;

    getSupportActionBar().setBackgroundDrawable(new ColorDrawable(0xFF000000 | color));

    boolean dark = Color.red(color) * 0.299 + Color.green(color) * 0.587 + Color.blue(color) * 0.114 < 180;
    SpannableString s = new SpannableString(getSupportActionBar().getTitle());
    s.setSpan(new ForegroundColorSpan(dark ? Color.WHITE : Color.BLACK), 0, s.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    getSupportActionBar().setTitle(s);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        float[] hsv = new float[3];
        Color.colorToHSV(color, hsv);
        hsv[2] *= 0.75;
        getWindow().setStatusBarColor(Color.HSVToColor(hsv));
    }
}
 
Example 2
Source File: HsvEvaluator.java    From AndroidStudyDemo with GNU General Public License v2.0 6 votes vote down vote up
@Override
public Integer evaluate(float fraction, Integer startValue, Integer endValue) {
    float[] startHsv = new float[3];
    float[] endHsv = new float[3];
    float[] currentHsv = new float[3];

    Color.colorToHSV(startValue, startHsv);
    Color.colorToHSV(endValue, endHsv);

    for (int i = 0; i < 3; i++) {
        currentHsv[i] = (1 - fraction) * startHsv[i] + fraction * endHsv[i];
    }

    while (currentHsv[0] >= 360.0f) {
        currentHsv[0] -= 360.0f;
    }
    while (currentHsv[0] < 0.0f) {
        currentHsv[0] += 360.0f;
    }

    return Color.HSVToColor(currentHsv);
}
 
Example 3
Source File: SkinCompatCardView.java    From Android-skin-support with MIT License 6 votes vote down vote up
private void applyBackgroundColorResource() {
    mBackgroundColorResId = SkinCompatHelper.checkResourceId(mBackgroundColorResId);
    mThemeColorBackgroundResId = SkinCompatHelper.checkResourceId(mThemeColorBackgroundResId);
    ColorStateList backgroundColor;
    if (mBackgroundColorResId != INVALID_ID) {
        backgroundColor = SkinCompatResources.getColorStateList(getContext(), mBackgroundColorResId);
        setCardBackgroundColor(backgroundColor);
    } else if (mThemeColorBackgroundResId != INVALID_ID) {
        int themeColorBackground = SkinCompatResources.getColor(getContext(), mThemeColorBackgroundResId);
        final float[] hsv = new float[3];
        Color.colorToHSV(themeColorBackground, hsv);
        backgroundColor = ColorStateList.valueOf(hsv[2] > 0.5f
                ? getResources().getColor(R.color.cardview_light_background)
                : getResources().getColor(R.color.cardview_dark_background));
        setCardBackgroundColor(backgroundColor);
    }
}
 
Example 4
Source File: OpacityBar.java    From PhotoEdit with Apache License 2.0 6 votes vote down vote up
/**
 * Set the bar color. <br>
 * <br>
 * Its discouraged to use this method.
 *
 * @param color
 */
public void setColor(int color) {
    int x1, y1;
    if(mOrientation == ORIENTATION_HORIZONTAL) {
        x1 = (mBarLength + mBarPointerHaloRadius);
        y1 = mBarThickness;
    }
    else {
        x1 = mBarThickness;
        y1 = (mBarLength + mBarPointerHaloRadius);
    }

    Color.colorToHSV(color, mHSVColor);
    shader = new LinearGradient(mBarPointerHaloRadius, 0,
            x1, y1, new int[] {
            Color.HSVToColor(0x00, mHSVColor), color }, null,
            Shader.TileMode.CLAMP);
    mBarPaint.setShader(shader);
    calculateColor(mBarPointerPosition);
    mBarPointerPaint.setColor(mColor);
    if (mPicker != null) {
        mPicker.setNewCenterColor(mColor);
    }
    invalidate();
}
 
Example 5
Source File: ColoringUtils.java    From coloring with GNU General Public License v3.0 6 votes vote down vote up
/**
 * Given a color returns two new colors which can be used as start and end colors of a gradient. The two colors are
 * darkened and lightened version of the original color. The first is darkened, the second lightened.
 *
 * @param color A given color.
 * @return An array of two colors.
 */
public static int[] colorSelectionButtonBackgroundGradient(int color) {
    int[] gradientColors = new int[2];
    float[] hsv = new float[3];

    // darken
    Color.colorToHSV(color, hsv);
    hsv[2] *= DARKEN_LIGHTEN_FACTOR;
    gradientColors[0] = Color.HSVToColor(hsv);

    // lighten
    Color.colorToHSV(color, hsv);
    hsv[2] = 1 - DARKEN_LIGHTEN_FACTOR * (1 - hsv[2]);
    gradientColors[1] = Color.HSVToColor(hsv);

    return gradientColors;
}
 
Example 6
Source File: SVBar.java    From nono-android with GNU General Public License v3.0 6 votes vote down vote up
/**
 * Set the bar color. <br>
 * <br>
 * Its discouraged to use this method.
 * 
 * @param color
 */
public void setColor(int color) {
	int x1, y1;
	if(mOrientation) {
		x1 = (mBarLength + mBarPointerHaloRadius);
		y1 = mBarThickness;
	}        else {
		x1 = mBarThickness;
		y1 = (mBarLength + mBarPointerHaloRadius);
	}
	
	Color.colorToHSV(color, mHSVColor);
	shader = new LinearGradient(mBarPointerHaloRadius, 0,
			x1, y1, new int[] {Color.WHITE, color, Color.BLACK}, null,
			Shader.TileMode.CLAMP);
	mBarPaint.setShader(shader);
    calculateColor(mBarPointerPosition);
	mBarPointerPaint.setColor(mColor);
	if (mPicker != null) {
		mPicker.setNewCenterColor(mColor);
		if(mPicker.hasOpacityBar())
			mPicker.changeOpacityBarColor(mColor);
	}
	invalidate();
}
 
Example 7
Source File: ColorPickerView.java    From timecat with Apache License 2.0 6 votes vote down vote up
private ColorCircle findNearestByColor(int color) {
	float[] hsv = new float[3];
	Color.colorToHSV(color, hsv);
	ColorCircle near = null;
	double minDiff = Double.MAX_VALUE;
	double x = hsv[1] * Math.cos(hsv[0] * Math.PI / 180);
	double y = hsv[1] * Math.sin(hsv[0] * Math.PI / 180);

	for (ColorCircle colorCircle : renderer.getColorCircleList()) {
		float[] hsv1 = colorCircle.getHsv();
		double x1 = hsv1[1] * Math.cos(hsv1[0] * Math.PI / 180);
		double y1 = hsv1[1] * Math.sin(hsv1[0] * Math.PI / 180);
		double dx = x - x1;
		double dy = y - y1;
		double dist = dx * dx + dy * dy;
		if (dist < minDiff) {
			minDiff = dist;
			near = colorCircle;
		}
	}

	return near;
}
 
Example 8
Source File: BitmapsGenerator.java    From AndroidPhotoshopColorPicker with Artistic License 2.0 6 votes vote down vote up
/**Gets a Rectangular Bitmap representing the Gradient of Sat and Val copied from the given BitmapDrawable for the given Hue
 * @param bitmapDrawable A BitmapDrawable to use as a base for the gradient of Sat and Val
 * @param hue Value of Hue to use for the bitmap generation of SatVal Gradient bitmap
 * @param width Width of the SatValPicker
 * @param height Height of the SatValPicker
 * @param skipCount Number of pixels to skip when generating Bitmap (increasing this results in faster bitmap generation but reduces bitmap quality)
 * @return A Rectangular Bitmap representing the Gradient of Sat and Val copied from the given BitmapDrawable for the given Hue
 */
@Deprecated
public static Bitmap getSatValBitmapFrom(BitmapDrawable bitmapDrawable,float hue, int width, int height, int skipCount){
    int[] pixels=new int[width*height];
    Bitmap bitmap=bitmapDrawable.getBitmap();
    bitmap.getPixels(pixels, 0, width, 0, 0, width, height);
    for(int i=0;i<pixels.length;i++){
        float[] hsv=new float[3];
        Color.colorToHSV(pixels[i],hsv);
        hsv[0]=hue;
        pixels[i]=Color.HSVToColor(hsv);
    }

    bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
    return bitmap;
}
 
Example 9
Source File: HsvEvaluator.java    From cogitolearning-examples with MIT License 6 votes vote down vote up
@Override
public Integer evaluate(float fraction, Integer startValue, Integer endValue)
{
  float[] startHsv = new float[3];
  float[] endHsv = new float[3];
  float[] currentHsv = new float[3];
  
  Color.colorToHSV(startValue, startHsv);
  Color.colorToHSV(endValue, endHsv);
  
  for (int i=0; i<3; i++)
    currentHsv[i] = (1-fraction)*startHsv[i] + fraction*endHsv[i];

  while (currentHsv[0]>=360.0f) currentHsv[0] -= 360.0f;
  while (currentHsv[0]<0.0f) currentHsv[0] += 360.0f;
  
  return Color.HSVToColor(currentHsv);
}
 
Example 10
Source File: PercentageCircleView.java    From moVirt with Apache License 2.0 5 votes vote down vote up
/**
 * Used for altering color in touch up/down events
 *
 * @param color color
 * @return adjusted color
 */
private int adjustColor(int color) {
    if (isActivated()) {
        final double valueShift = 0.07;
        float[] hsbVals = new float[3];

        Color.colorToHSV(color, hsbVals);
        hsbVals[2] += valueShift;
        color = Color.HSVToColor(hsbVals);
    }
    return color;
}
 
Example 11
Source File: MainActivity.java    From IdeaTrackerPlus with MIT License 5 votes vote down vote up
private int darken(int color) {
    float[] hsv = new float[3];
    Color.colorToHSV(color, hsv);
    hsv[2] *= 0.85f;
    color = Color.HSVToColor(hsv);
    return color;
}
 
Example 12
Source File: LineProgressBar.java    From IndicatorBox with MIT License 5 votes vote down vote up
/**
 * Use HSV to calculate the color transition.
 * @param startColor startColor
 * @param endColor  endColor
 * @param fraction fraction
 * @return int current color.
 */
private int currentColorDuringTransition(int startColor, int endColor, float fraction){
    final float[] from = new float[3], to = new float[3];
    //fetch startColor
    Color.colorToHSV(startColor, from);
    //fetch endColor
    Color.colorToHSV(endColor, to);
    final float[] hsv = new float[3];
    hsv[0] = from[0] + (to[0] - from[0]) * fraction;
    hsv[1] = from[1] + (to[1] - from[1]) * fraction;
    hsv[2] = from[2] + (to[2] - from[2]) * fraction;
    return Color.HSVToColor(hsv);
}
 
Example 13
Source File: Palette.java    From Slide with GNU General Public License v3.0 5 votes vote down vote up
public static int getDarkerColor(int color) {
    float[] hsv = new float[3];

    Color.colorToHSV(color, hsv);
    hsv[2] *= 0.8f;
    color = Color.HSVToColor(hsv);

    return color;
}
 
Example 14
Source File: ColorPicker.java    From Telegram-FOSS with GNU General Public License v2.0 5 votes vote down vote up
private int generateGradientColors(int color) {
    float[] hsv = new float[3];
    Color.colorToHSV(color, hsv);
    if (hsv[1] > 0.5f) {
        hsv[1] -= 0.15f;
    } else {
        hsv[1] += 0.15f;
    }
    if (hsv[0] > 180) {
        hsv[0] -= 20;
    } else {
        hsv[0] += 20;
    }
    return Color.HSVToColor(255, hsv);
}
 
Example 15
Source File: CircleIndicator.java    From ViewPagerHelper with Apache License 2.0 5 votes vote down vote up
@Override
public Integer evaluate(float fraction, Integer startValue, Integer endValue) {
    // 把 ARGB 转换成 HSV
    Color.colorToHSV(startValue, startHsv);
    Color.colorToHSV(endValue, endHsv);

    // 计算当前动画完成度(fraction)所对应的颜色值
    if (endHsv[0] - startHsv[0] > 180) {
        endHsv[0] -= 360;
    } else if (endHsv[0] - startHsv[0] < -180) {
        endHsv[0] += 360;
    }
    outHsv[0] = startHsv[0] + (endHsv[0] - startHsv[0]) * fraction;
    if (outHsv[0] > 360) {
        outHsv[0] -= 360;
    } else if (outHsv[0] < 0) {
        outHsv[0] += 360;
    }
    outHsv[1] = startHsv[1] + (endHsv[1] - startHsv[1]) * fraction;
    outHsv[2] = startHsv[2] + (endHsv[2] - startHsv[2]) * fraction;

    // 计算当前动画完成度(fraction)所对应的透明度
    int alpha = startValue >> 24 + (int) ((endValue >> 24 - startValue >> 24) * fraction);

    // 把 HSV 转换回 ARGB 返回
    return Color.HSVToColor(alpha, outHsv);
}
 
Example 16
Source File: LightnessSlider.java    From timecat with Apache License 2.0 5 votes vote down vote up
@Override
protected void drawBar(Canvas barCanvas) {
	int width = barCanvas.getWidth();
	int height = barCanvas.getHeight();

	float[] hsv = new float[3];
	Color.colorToHSV(color, hsv);
	int l = Math.max(2, width / 256);
	for (int x = 0; x <= width; x += l) {
		hsv[2] = (float) x / (width - 1);
		barPaint.setColor(Color.HSVToColor(hsv));
		barCanvas.drawRect(x, 0, x + l, height, barPaint);
	}
}
 
Example 17
Source File: ValueBar.java    From memoir with Apache License 2.0 5 votes vote down vote up
@Override
protected Parcelable onSaveInstanceState() {
    Parcelable superState = super.onSaveInstanceState();

    Bundle state = new Bundle();
    state.putParcelable(STATE_PARENT, superState);
    state.putFloatArray(STATE_COLOR, mHSVColor);

    float[] hsvColor = new float[3];
    Color.colorToHSV(mColor, hsvColor);
    state.putFloat(STATE_VALUE, hsvColor[2]);
    state.putBoolean(STATE_ORIENTATION, ORIENTATION_HORIZONTAL);

    return state;
}
 
Example 18
Source File: CsnA2.java    From contrib-drivers with Apache License 2.0 4 votes vote down vote up
/**
 * Returns bytes to print a bitmap in black-and-white. Any pixel on the bitmap that is not
 * transparent or white will be rendered as black on the printer. The bitmaps should not be
 * larger than 384 pixels.
 *
 * @param bitmap The bitmap to be printed.
 * @return Command to execute.
 */
public static byte[] commandPrintBitmap(@NonNull Bitmap bitmap) {
    final int BAND_HEIGHT = 24;

    int width = bitmap.getWidth();
    int height = bitmap.getHeight();

    ByteBuffer buffer = ByteBuffer.allocateDirect(width * 3 * (height / BAND_HEIGHT) * 10 + 3);
    // Send control bytes in big endian order.
    final byte[] controlByte = {(byte) (0x00ff & width), (byte) ((0xff00 & width) >> 8)};

    int[] pixels = new int[width * height];
    bitmap.getPixels(pixels, 0, width, 0, 0, width, height);
    // Bands of pixels are sent that are 8 pixels high.  Iterate through bitmap
    // 24 rows of pixels at a time, capturing bytes representing vertical slices 1 pixel wide.
    // Each bit indicates if the pixel at that position in the slice should be dark or not.
    boolean[] isDark = new boolean[3];
    byte[] bandBytes = new byte[3];
    int[] pixelSlice = new int[3];
    float[] pixelSliceHsv = new float[3];
    for (int row = 0; row < height - 8; row += BAND_HEIGHT) {
        buffer.put(BITMAP_SET_LINE_SPACE_24);
        // Need to send these two sets of bytes at the beginning of each row.
        buffer.put(BITMAP_SELECT_BIT_IMAGE_MODE);
        buffer.put(controlByte);
        // Columns, unlike rows, are one at a time.
        for (int col = 0; col < width; col++) {
            // Reset the values of bandBytes for a new column
            bandBytes[0] = 0;
            bandBytes[1] = 0;
            bandBytes[2] = 0;
            // For each starting row/col position, evaluate each pixel in a column, or "band",
            // 24 pixels high.  Convert into 3 bytes.
            for (int rowOffset = 0; rowOffset < 8; rowOffset++) {
                // Because the printer only maintains correct height/width ratio
                // at the highest density, where it takes 24 bit-deep slices, process
                // a 24-bit-deep slice as 3 bytes.
                int pixel2Row = row + rowOffset + 8;
                int pixel3Row = row + rowOffset + 16;
                // If we go past the bottom of the image, just send white pixels so the printer
                // doesn't do anything.  Everything still needs to be sent in sets of 3 rows.
                pixelSlice[0] = bitmap.getPixel(col, row + rowOffset);
                pixelSlice[1] = (pixel2Row >= bitmap.getHeight()) ?
                        Color.TRANSPARENT : bitmap.getPixel(col, pixel2Row);
                pixelSlice[2] = (pixel3Row >= bitmap.getHeight()) ?
                        Color.TRANSPARENT : bitmap.getPixel(col, pixel3Row);

                for (int slice = 0; slice < 3; slice++) {
                    Color.colorToHSV(pixelSlice[slice], pixelSliceHsv);
                    isDark[slice] = pixelSliceHsv[2] < 25; // Hsv[2] -> Value should be 10% dark
                    if (Color.alpha(pixelSlice[slice]) < 25) {
                        isDark[slice] = false;
                    }
                    if (isDark[slice]) {
                        bandBytes[slice] |= 1 << (7 - rowOffset);
                    }
                }
            }
            // Write row's pixel data
            buffer.put(bandBytes);
        }
        // Finished row
        buffer.put(commandFeedLines((byte) 1));
    }
    // Finish image
    buffer.put(commandFeedLines((byte) 1));
    return buffer.array();
}
 
Example 19
Source File: ImageUtils.java    From Pasta-Music with Apache License 2.0 4 votes vote down vote up
public static int darkColor(int color) {
    float[] hsv = new float[3];
    Color.colorToHSV(color, hsv);
    hsv[2] *= 0.8f;
    return Color.HSVToColor(hsv);
}
 
Example 20
Source File: ColorPicker.java    From redalert-android with Apache License 2.0 4 votes vote down vote up
public void setColor(int color) {
    Color.colorToHSV(color, colorHSV);
}