【问题标题】:Convert RGB to Hex using java code - Android [duplicate]使用java代码将RGB转换为十六进制 - Android [重复]
【发布时间】:2014-05-14 16:19:17
【问题描述】:

我正在使用此代码将 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());

            }
        });

【问题讨论】:

  • 所以实际上你需要从基数 10 转换为基数 16,即十进制到十六进制?
  • 前几天我不是花了很多时间帮你解决这个问题吗?你想让其他人重新经历同样的过程吗?
  • 首先,你能说出你为什么要在不使用API​​的情况下这样做的原因吗?无论如何,here is the answer

标签: java android hex converter rgb


【解决方案1】:

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

您正在寻找一种将基数为 10 的数字转换为基数为 16 的数字的方法。您想自己编写代码,但显然不是自己编写代码,因为您在这里。对吧?

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

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

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

等等,你明白了。

然后从第一部分取出您的商,如果大于 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,因为这种方式可能存在很多问题。

【讨论】:

  • 你能帮我写代码吗?我遇到了麻烦。请:(
  • 添加了关于如何编写代码的迷你教程,应该可以很好地指导您完成整个过程。
【解决方案2】:

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

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

阅读java.util.Formatterjavadoc 了解更多格式选项。

【讨论】:

  • 这可行,但我想使用真正的计算。就像运算符和余数等一样。你能帮我吗? :(
猜你喜欢
  • 2018-10-13
  • 2011-05-06
  • 2020-11-14
  • 2014-01-15
  • 2016-03-09
  • 2019-01-01
  • 2015-01-31
相关资源
最近更新 更多