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));
}
});
我有这个代码在触摸图像上给出RGB代码..但我想要图像的十六进制代码..如何将十六进制转换为RGB? 我已经尝试过以下代码,但是ID不起作用..
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));
请建议我如何将此RGB转换为Hex
答案 0 :(得分:2)
你不需要那个,只需使用字符串:
selected_color.setTextColor(Color.parseColor("#"+redValue+greenValue+blueValue));
编辑: 使用此代码从整数中获取十六进制:
Integer.toString(value, 16)
答案 1 :(得分:2)
RGB颜色是红色,绿色和蓝色的组合: (R,G,B) 红色,绿色和蓝色各使用8位,整数值从0到255。
因此可以生成的颜色数量为:
256×256×256 = 16777216 = 100000016
十六进制颜色代码是一个6位十六进制(基数为16)的数字: RRGGBB16
左边的2位代表红色
2个中间数字代表绿色
2位右边的数字代表蓝色。
RGB到十六进制转换
将红色,绿色和蓝色颜色值从十进制转换为十六进制
连接红色,绿色和蓝色togather的3个十六进制值:RRGGBB。
将红色(255,0,0)转换为十六进制颜色代码:
R = 25510 = FF16
G = 010 = 0016
B = 010 = 0016
所以十六进制颜色代码是:
Hex = FF0000
将金色(255,215,0)转换为十六进制颜色代码:
R = 25510 = FF16
G = 21510 = D716
B = 010 = 0016
所以十六进制颜色代码是:
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;
}
}