【问题标题】:how to convert rgb color to int in java如何在java中将rgb颜色转换为int
【发布时间】:2013-08-04 01:07:44
【问题描述】:

Paint.setColor 需要一个整数。但我拥有的是一个Color 对象。我在 Java 中没有看到 color.getIntValue()?那么我该怎么做呢?我想要的是类似的东西

public Something myMethod(Color rgb){
    myPaint.setColor(rgb.getIntValue());
    ...
}

更正:android.graphics.Color; 我认为将android 作为标签之一就足够了。但显然不是。

【问题讨论】:

  • 这看起来是同样的问题:stackoverflow.com/questions/6926644/…
  • 你的颜色对象来自哪里?我很困惑为什么你首先传递一个 Color 对象而不是代表颜色的 int 。 android 中的 Color 类定义了用于创建和转换颜色整数的静态方法。据我了解,它不应该被初始化

标签: java android android-layout colors paint


【解决方案1】:
int color =  Color.rgb(red, green, blue);

其中红色、绿色蓝色是 0 到 255 之间的 int 值。

【讨论】:

    【解决方案2】:

    int 颜色 = (A & 0xff)

    【讨论】:

      【解决方案3】:

      首先,android.graphics.Color 是一个仅由静态方法组成的类。您如何以及为什么创建一个新的 android.graphics.Color 对象? (这完全没用,对象本身不存储数据)

      但无论如何...我将假设您使用一些实际存储数据的对象...

      一个整数由 4 个字节组成(在 java 中)。查看标准 java Color 对象中的 getRGB() 函数,我们可以看到 java 按 ARGB(Alpha-Red-Green-Blue)的顺序将每种颜色映射到整数的一个字节。我们可以使用自定义方法复制此行为,如下所示:

      public int getIntFromColor(int Red, int Green, int Blue){
          Red = (Red << 16) & 0x00FF0000; //Shift red 16-bits and mask out other stuff
          Green = (Green << 8) & 0x0000FF00; //Shift Green 8-bits and mask out other stuff
          Blue = Blue & 0x000000FF; //Mask out anything not blue.
      
          return 0xFF000000 | Red | Green | Blue; //0xFF000000 for 100% Alpha. Bitwise OR everything together.
      }
      

      这假设您可以通过某种方式检索单独的红色、绿色和蓝色分量,并且您为颜色传递的所有值都是 0-255。

      如果您的 RGB 值是介于 0 和 1 之间的浮点百分比,请考虑以下方法:

      public int getIntFromColor(float Red, float Green, float Blue){
          int R = Math.round(255 * Red);
          int G = Math.round(255 * Green);
          int B = Math.round(255 * Blue);
      
          R = (R << 16) & 0x00FF0000;
          G = (G << 8) & 0x0000FF00;
          B = B & 0x000000FF;
      
          return 0xFF000000 | R | G | B;
      }
      

      正如其他人所说,如果您使用的是标准 java 对象,只需使用 getRGB();

      如果您决定正确使用 android 颜色类,您也可以这样做:

      int RGB = android.graphics.Color.argb(255, Red, Green, Blue); //Where Red, Green, Blue are the RGB components. The number 255 is for 100% Alpha
      

      int RGB = android.graphics.Color.rgb(Red, Green, Blue); //Where Red, Green, Blue are the RGB components.
      

      正如其他人所说...(第二个函数假定 100% alpha)

      这两种方法基本上和上面创建的第一个方法做同样的事情。

      【讨论】:

      • 为什么这些变量都是大写的?
      【解决方案4】:

      试试这个:

      Color color = new Color (10,10,10)
      
      
      myPaint.setColor(color.getRGB());
      

      【讨论】:

      • 我正在使用 android.graphics.Color;
      【解决方案5】:

      如果你是为 Android 开发,Color 的方法是 rgb(int, int, int)

      所以你会做类似的事情

      myPaint.setColor(Color.rgb(int, int, int)); 
      

      要检索单个颜色值,您可以使用以下方法:

      Color.red(int color) 
      Color.blue(int color) 
      Color.green(int color) 
      

      更多信息请参考this document

      【讨论】:

        【解决方案6】:

        你想使用intvalue = Color.parseColor("#" + colorobject);

        【讨论】:

        • 很好的解决方案! ^_^
        【解决方案7】:

        使用getRGB(),有帮助(不需要复杂的程序)

        返回默认 RGB 颜色模型中的整数像素数组 (TYPE_INT_ARGB) 和默认 sRGB 颜色空间,来自 图像数据。

        【讨论】:

        • 这不是一个完整的答案。请详细说明。
        【解决方案8】:

        你可以在color.xml中声明一个值,这样你就可以通过调用下面的代码来获取整数值。

        context.getColor(int resId);
        

        【讨论】:

          【解决方案9】:

          Color 有一个 getRGB() 方法将颜色作为 int 返回。

          【讨论】:

          • 我编辑以显示我正在使用的更正android.graphics.Color;
          • 如果输入是浮点数需要 API 26
          猜你喜欢
          • 1970-01-01
          • 2017-09-11
          • 2021-11-27
          • 2011-06-03
          • 1970-01-01
          • 2017-06-24
          • 2010-09-26
          • 2011-08-25
          • 1970-01-01
          相关资源
          最近更新 更多