这不是重复的问题,我知道这是我的一些问题,但是我需要有关如何实现到我的应用程序的帮助。
我正在尝试制作一个可以捕获颜色的android应用程序,但是我只发现了如何获取Hex值,但我确实需要颜色的名称! 请帮助,有人! 下面是整个代码,但上面写着
public static String makeHexString(int value) {
return "#" + Integer.toHexString(value).substring(2);}
这行,Integer.toHexString如何获取颜色名称而不是十六进制值?
public class ColorItem implements Parcelable {
protected final long mId;
protected int mColor;
protected String mName;
protected final long mCreationTime;
protected transient String mHexString;
protected transient String mRgbString;
protected transient String mHsvString;
public ColorItem(long id, int color) {
mId = id;
mColor = color;
mCreationTime = System.currentTimeMillis();
}
private ColorItem(Parcel in) {
this.mId = in.readLong();
this.mColor = in.readInt();
this.mCreationTime = in.readLong();
this.mName = in.readString();
}
public ColorItem(int color) {
mId = mCreationTime = System.currentTimeMillis();
mColor = color;
}
public long getId() {
return mId;
}
public int getColor() {
return mColor;
}
public void setColor(int color) {
if (mColor != color) {
mColor = color;
mHexString = makeHexString(mColor);
mRgbString = makeRgbString(mColor);
mHsvString = makeHsvString(mColor);
}
}
public long getCreationTime() {
return mCreationTime;
}
public String getHexString() {
if (mHexString == null) {
mHexString = makeHexString(mColor);
}
return mHexString;
}
public String getRgbString() {
if (mRgbString == null) {
mRgbString = makeRgbString(mColor);
}
return mRgbString;
}
public String getHsvString() {
if (mHsvString == null) {
mHsvString = makeHsvString(mColor);
}
return mHsvString;
}
public String getName() {
return mName;
}
public void setName(String name) {
mName = name;
}
public static String makeHexString(int value) {
return "#" + Integer.toHexString(value).substring(2);
}
public static String makeRgbString(int value) {
return "rgb(" + Color.red(value) + ", " + Color.green(value) + ", " + Color.blue(value) + ")";
}
public static String makeHsvString(int value) {
float[] hsv = new float[3];
Color.colorToHSV(value, hsv);
return "hsv(" + (int) hsv[0] + "°, " + (int) (hsv[1] * 100) + "%, " + (int) (hsv[2] * 100) + "%)";
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeLong(this.mId);
dest.writeInt(this.mColor);
dest.writeLong(this.mCreationTime);
dest.writeString(this.mName);
}
public static final Creator<ColorItem> CREATOR = new Creator<ColorItem>() {
public ColorItem createFromParcel(Parcel source) {
return new ColorItem(source);
}
public ColorItem[] newArray(int size) {
return new ColorItem[size];
}
};
}
答案 0 :(得分:0)
以下是一些颜色名称:
public String getColorName(String hexColor) {
String name = "";
switch (hexColor.toLowerCase()) {
case "#ff0000":
name = "Red";
break;
case "#00ff00":
name = "Green";
break;
case "#0000ff":
name = "Blue";
break;
case "#ffffff":
name = "White";
break;
case "#000000":
name = "Black";
break;
default:
name = "Unknown";
break;
}
return name;
}
答案 1 :(得分:0)
使得这变得非常困难的是,通常我们将颜色描述为特定的十六进制值。有2 ^ 24个不同的十六进制值,但仅约200种已命名的颜色。
您可以做的是使用色块的概念从几何角度进行思考。它具有3个维度,一个代表红色,一个代表蓝色,一个代表绿色。如果您还具有命名颜色的列表以及它们各自包含的R,G和B的数量,则可以将它们视为立方体中的点。然后,对于任何颜色,您都可以找到最接近的点,这将是对颜色的一个很好的估计。但是,这将导致信息丢失,因为在您拥有如此多的可能值(2 ^ 24)之前,而在您只有〜200之后。
为此,您首先需要将十六进制代码解析为一个3-d点,还需要将颜色列表中的每种颜色解析为一个3-d点。例如#ff0024
等于[255,0,36]。
现在,您需要遍历命名颜色列表,并找到距您的点的最小距离的颜色名称。我将提供一些伪代码来解释这一点。
int [][] colorPoints = {{255, 255, 255}, {0, 0, 0}, ...};
String [] colorNames = {"white", "black", ...}; // These two arrays have the same length of N
int [] myColor = parseHexTo3dPoint(hexColorString); // Returns int array of length 3
double minDistance = Double.MAX_VALUE;
String closestColorName = colorNames[0];
for (int i = 0; i < colorNames.length; i++){
int [] color = colorPoints[i];
double d0 = (color[0] - myColor[0]);
double d1 = (color[1] - myColor[1]);
double d2 = (color[2] - myColor[2]);
double distance = Math.sqrt(d0*d0 + d1*d1 + d2*d2);
if (distance < minDistance){
minDistance = distance;
closestColorName = colorNames[i];
}
}
return closestColorName;
答案 2 :(得分:-2)
尝试Color类方法:
public static int parseColor (String colorString)
来自Android文档:
支持的格式为:#RRGGBB #AARRGGBB'红色','蓝色','绿色', '黑色','白色','灰色','青色','品红色','黄色','浅灰色', 'darkgray'
例如:-
int myColor = Color.parseColor("#3F51B5");
myView.setBackgroundColor(myColor);
根据您的代码:
public static int makeHexString(int value) {
int myColor = Color.parseColor("#" +
Integer.toHexString(value).substring(2));
return myColor;
}