Reputation: 71
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
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
Reputation: 15821
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.
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
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
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