user4440416
user4440416

Reputation: 71

How to convert RGB into Hex

public boolean onTouch(View v, MotionEvent event) {
                int x = (int) event.getX();
                int y = (int) event.getY();
                final Bitmap bitmap = ((BitmapDrawable) image.getDrawable())
                        .getBitmap();
                int pixel = bitmap.getPixel(x, y);
                redValue = Color.red(pixel);
                blueValue = Color.blue(pixel);
                greenValue = Color.green(pixel); 

                Log.d("***RGB***", "X: "+x+" Y: "+y /*+" Green: "+greenValue*/);

                selected_color.setText(""+redValue+""+blueValue+""+greenValue);
                selected_color.setTextColor(Color.rgb(redValue, greenValue,
                        blueValue));

            }
        });

i have this code which gives RGB code on touch image .. but i want hex code of the image.. how to convert Hex into RGB?? i have tried this below code but id doesnt work ..

int r=redValue, g=greenValue, b=blueValue;
            String hex = String.format("#%02x%02x%02x", r, g, b);
            selected_colour.setTextColor(Color.rgb(r,g,b));

kindly suggest me how can i convert this RGB into Hex

Upvotes: 0

Views: 3618

Answers (2)

Ali Hajhosseini
Ali Hajhosseini

Reputation: 31

you dont need that, just use string:

selected_color.setTextColor(Color.parseColor("#"+redValue+greenValue+blueValue));

edited: use this code to get hex from integer:

Integer.toString(value, 16)

Upvotes: 3

Sergey Shustikov
Sergey Shustikov

Reputation: 15821

Some theory

The RGB color is a combination of Red, Green and Blue colors: (R, G, B) The red, green and blue use 8 bits each, which have integer values from 0 to 255.

So the number of colors that can be generated is:

256×256×256 = 16777216 = 100000016

Hex color code is a 6 digits hexadecimal (base 16) number: RRGGBB16

The 2 left digits represent the red color.
The 2 middle digits represent the green color.
The 2 right digits represent the blue color.

RGB to hex conversion
Convert the red, green and blue color values from decimal to hex.
Concatenate the 3 hex values of the red, green and blue togather: RRGGBB.

Example #1

Convert red color (255,0,0) to hex color code:

R = 25510 = FF16
G = 010 = 0016
B = 010 = 0016

So the hex color code is:

Hex = FF0000

Example #2

Convert gold color (255,215,0) to hex color code:

R = 25510 = FF16
G = 21510 = D716
B = 010 = 0016

So the hex color code is:

Hex = FFD700

In Android\Java :

import java.awt.Color;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RGBHexInterConverter {
    static String commaSeparatedRGBPattern = "^(\\d{3}),(\\d{3}),(\\d{3})$";
    static final int HEXLENGTH = 8;
    static final String hexaDecimalPattern = "^0x([\\da-fA-F]{1,8})$";

    public static void main(String[] args) {
        /** Some sample RGB and HEX Values for Conversion */
        String RGBForHexConversion = "128,128,255";
        String hexForRGBConversion = "0x0077c8d2";

        /** Convert from RGB to HEX */
        covertRGBToHex(RGBForHexConversion);

        /** Convert from HEX to RGB */
        convertHexToRGB(hexForRGBConversion);

        /**Pass some invalid RGB value for Hex Conversion*/
        covertRGBToHex("3002,4001,5301");

        /**Pass some invalid HEX value for RGB Conversion*/
        convertHexToRGB("5xY077c8d2"); 

    }

    /**
     * @param hexForRGBConversion
     *            - hex value string for conveting to RGB format. Valid format
     *            is: 0xXXXXXXXX e.g. 0x0077c8d2
     * @return comma separated rgb values in the format rrr,ggg, bbb e.g.
     *         "119,200,210"
     */
    private static String convertHexToRGB(String hexForRGBConversion) {
        System.out.println("...converting Hex to RGB");
        String rgbValue = "";
        Pattern hexPattern = Pattern.compile(hexaDecimalPattern);
        Matcher hexMatcher = hexPattern.matcher(hexForRGBConversion);

        if (hexMatcher.find()) {
            int hexInt = Integer.valueOf(hexForRGBConversion.substring(2), 16)
                    .intValue();

            int r = (hexInt & 0xFF0000) >> 16;
            int g = (hexInt & 0xFF00) >> 8;
            int b = (hexInt & 0xFF);

            rgbValue = r + "," + g + "," + b;
            System.out.println("Hex Value: " + hexForRGBConversion
                    + "\nEquivalent RGB Value: " + rgbValue);
        } else {
            System.out.println("Not a valid Hex String: " + hexForRGBConversion
                    + "\n>>>Please check your input string.");
        }
        System.out.println();
        return rgbValue;

    }

    /**
     * @param rgbForHexConversion
     *           - comma separated rgb values in the format rrr,ggg, bbb e.g.
     *            "119,200,210"
     * @return equivalent hex in the format 0xXXXXXXXX e.g. 0x0077c8d2
     *
     *        If the converted hex value is not 8 characters long, pads the
     *         zeros in the front.
     */
    private static String covertRGBToHex(String rgbForHexConversion) {
        System.out.println("...converting RGB to Hex");
        String hexValue = "";
        Pattern rgbPattern = Pattern.compile(commaSeparatedRGBPattern);
        Matcher rgbMatcher = rgbPattern.matcher(rgbForHexConversion);

        int red;
        int green;
        int blue;
        if (rgbMatcher.find()) {
            red = Integer.parseInt(rgbMatcher.group(1));
            green = Integer.parseInt(rgbMatcher.group(2));
            blue = Integer.parseInt(rgbMatcher.group(3));
            Color color = new Color(red, green, blue);
            hexValue = Integer.toHexString(color.getRGB() & 0x00ffffff);
            int numberOfZeroesNeededForPadding = HEXLENGTH - hexValue.length();
            String zeroPads = "";
            for (int i = 0; i < numberOfZeroesNeededForPadding; i++) {
                zeroPads += "0";
            }
            hexValue = "0x" + zeroPads + hexValue;
            System.out.println("RGB value: " + rgbForHexConversion
                    + "\nEquivalent Hex Value: " + hexValue);
        } else {
            System.out.println("Not a valid RGB String: "+rgbForHexConversion
                    + "\n>>>Please check your inut string.");
        }


        System.out.println();
        return hexValue;
    }
}

Upvotes: 3

Related Questions