使用java代码将RGB转换为Hex - Android

时间:2014-04-03 03:43:45

标签: java android hex converter rgb

我使用此代码将RGB转换为十六进制颜色。我有3个Edittext来输入R,G和B.现在我要做的是在不使用API​​的情况下进行转换。就像使用我自己的代码而不是通过toHexString()转换和计算它一样。有人可以帮助我这样做吗?非常感谢。这是我的代码。

      convert.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {

                final int r = Integer.parseInt(showRed.getText().toString());
                final int g = Integer.parseInt(showGreen.getText().toString());
                final int b = Integer.parseInt(showBlue.getText().toString());

                final StringBuilder builder = new StringBuilder();
                builder.append("#");
                builder.append(Integer.toHexString(r)); // Real computation here
                builder.append(Integer.toHexString(g)); // Real computation here
                builder.append(Integer.toHexString(b)); // Real computation here

                result.setText(builder.toString());

            }
        });

2 个答案:

答案 0 :(得分:4)

假设[0,255]范围内的rgb值:

String hexColor = String.format( "#%02x%02x%02x", r, g, b );

阅读java.util.Formatter javadoc以获取更多格式选项。

答案 1 :(得分:2)

所以你想在没有toHexString的情况下出于某种原因......

您正在寻找的是一种将基数为10的数字转换为基数为16的方法。你想自己编码,但实际上并不是自己编码,因为你在这里。正确?

将数字除以16.如果大于9,则将余数转换为十六进制;

if(number > 9) {
    switch(number) {
        case 10: string remainderPlaceholder = "A";
        break;

        case 11: string remainderPlaceholder = "B";
        break;

Etcetera,你明白了。

然后从第一部分取你的商,如果大于16,再将它除以16,取余数并使用上面提到的selfsame switch语句再次将其转换为十六进制。

滚动,冲洗并重复,将每个新答案附加到字符串的前面,直到您获得完整的值。

示例:255/16 = 15r15 15(使用上述开关转换为十六进制)=“F”; 再一次。

现在再举一个例子,编号为146:

146/16 = 9r2

转换为十六进制:92。

如果你真的想让我为你写出代码,请告诉我。但是如果你这样做,你也可以使用toHexString(),因为它比我为你写的任何东西都更有效率,因为你不会自己编写代码......

编辑:一些伪代码,以便您可以弄清楚如何编码:

int redMain = r/16;
int redRemainder = r%16;
//(do the same thing for green and blue)
int redFirst = redMain/16;

然后将上面的case语句放入一个函数中,并在连续两行中调用它,如

public void makeHex(number) {
    if(number > 9) {
        switch(number) {
            case 10: string remainderPlaceholder = "A";
            break;

            case 11: string remainderPlaceholder = "B";
            break;
//etcetera

你会这样称呼     makeHex(redMain);

然后你必须以正确的顺序附加字符串,所以它看起来像;

String redValue = makeHex(redMain).toString();
redValue = redValue + makeHex(redMain).toString();

然后将它们与

之类的标签一起放在一起
String finalHex = "#" + redValue + greenValue + blueValue;

不太难。

但是我会认真地使用toHexString,因为这种做法可能会出现一些问题。