【问题标题】:How to convert getRGB(x,y) integer pixel to Color(r,g,b,a) in Java?如何在 Java 中将 getRGB(x,y) 整数像素转换为 Color(r,g,b,a)?
【发布时间】:2011-02-01 19:26:39
【问题描述】:

我有从getRGB(x,y) 获得的整数像素,但我不知道如何将其转换为 RGBA 格式。例如,-16726016 应该是 Color(0,200,0,255)。有什么建议吗?

【问题讨论】:

    标签: java image colors


    【解决方案1】:

    如果我猜对了,你得到的是一个0xAARRGGBB 形式的无符号整数,所以

    int b = (argb)&0xFF;
    int g = (argb>>8)&0xFF;
    int r = (argb>>16)&0xFF;
    int a = (argb>>24)&0xFF;
    

    会提取颜色成分。但是,快速查看docs 说您可以这样做

    Color c = new Color(argb);
    

    Color c = new Color(argb, true);
    

    如果您还想要 Color 中的 alpha 组件。

    更新

    红色和蓝色分量在原始答案中是相反的,所以正确答案是:

    int r = (argb>>16)&0xFF;
    int g = (argb>>8)&0xFF;
    int b = (argb>>0)&0xFF;
    

    也在第一段代码中更新

    【讨论】:

    • @Gevorg:可能是。但这在测试代码时很明显。 :)
    • @AKX 除非你用 (0,200,0,255) 测试它! ;)
    • 根据docs.oracle.com/javase/7/docs/api/java/awt/…:24-31 位为 alpha,16-23 位为红色,8-15 位为绿色,0-7 位为蓝色
    【解决方案2】:
        Color c = new Color(-16726016, true);
        System.out.println(c.getRed());
        System.out.println(c.getGreen());
        System.out.println(c.getBlue());
        System.out.println(c.getAlpha());
    

    打印出来:

    0
    200
    0
    255
    

    你是这个意思吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-23
      • 1970-01-01
      • 2019-03-16
      • 2011-05-30
      • 1970-01-01
      • 2019-08-16
      相关资源
      最近更新 更多