【问题标题】:How Do I Change 4 Separate Int Values For Alpha, Red, Green, Blue into TYPE_INT_RGB?如何将 Alpha、Red、Green、Blue 的 4 个独立 Int 值更改为 TYPE_INT_ARGB?
【发布时间】:2012-05-12 22:08:48
【问题描述】:

感谢您抽出宝贵时间 :)。我已经看过Format of TYPE_INT_RGB and TYPE_INT_ARGB 并且现在知道如何将此 TYPE_INT_RGB 转换为 4 个单独的值,但是如果我要对每个值进行修改(比如每个添加 20,所以 Alpha+=20、red+=20 和等等)我将如何将这些值重新组合成这种 TYPE_INT_RGB 格式?谢谢!

【问题讨论】:

    标签: java image bufferedreader


    【解决方案1】:
    // to extract the components into individual ints.
    int argb = something();
    int red = 0xFF & ( argb >> 16);
    int alpha = 0xFF & (argb >> 24);
    int blue = 0xFF & (argb >> 0 );
    int green = 0xFF & (argb >> 8 );
    
    // to recreate the argb
    int argb = (alpha << 24) | (red << 16 ) | (green<<8) | blue;
    

    【讨论】:

      【解决方案2】:

      我会为此使用java.awt.Color

      int ARGB = new Color(red, green, blue, alpha).getRGB();
      

      我猜你正在使用按位运算来提取各个颜色通道,但 Color 类可以隐藏那些血腥细节。

      Color color = new Color(ARGB);
      int red = color.getRed();
      int green = color.getGreen();
      // etc.
      

      【讨论】:

        【解决方案3】:

        我相信这应该可行

        int RGB = alpha;
        RGB = (RGB << 8) + red;
        RGB = (RGB << 8) + green;
        Rgb = (RGB << 8) + blue;
        

        还有另一种不用位移的方法,但我相信你会想出来的。

        这个也可以:

        int rgba = new java.awt.Color(r,g,b,a).getRGB();
        

        【讨论】:

        • 你真是太棒了!谢谢!哦,发现了一个小问题,顺序有点不对,这是对我有用的语法: int newRGB = alpha; newRGB = (newRGB
        • 您的位移错误,Color 没有toRGB。我坚信应尽可能避免按位操作,Color 允许这样做。
        • Color 从 JDK1.0 开始有 getRGB()?它返回int。见docs.oracle.com/javase/7/docs/api/java/awt/…
        猜你喜欢
        • 2021-12-20
        • 1970-01-01
        • 1970-01-01
        • 2021-02-03
        • 1970-01-01
        • 2018-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多