如何创建包含不透明度的颜色阵列?

时间:2018-07-15 09:00:56

标签: java processing sprite rgba

我正在尝试使用Processing IDE(版本3.3.7)在Java中创建精灵。它运行良好,但由于我的color [] []数组仅接受十六进制格式而不是rgba格式,因此无法绘制透明像素。

<svg xmlns="http://www.w3.org/2000/svg" width="75" height="83" viewBox="0 0 75 83" fill="none">
    <path d="M90.6668 0H0L49.9325 61.7586L90.6668 0Z" transform="translate(40.1452 82.6093) rotate(-115.609)" fill="#6F7800" />
</svg>

以上部分不是问题,但对于解决问题可能有用。

void setup(){ //This chunk of code is working fine
  size(384, 216);
  surface.setResizable(true);
  noStroke();

  renderSprite(Sprite.test, 100, 100);
}

void renderSprite(color[][] tex, int x, int y){
  for(int i = 0; i < tex.length; i++){
    for(int k = 0; k < tex[i].length; k++){
      fill(tex[i][k]);
      rect(x + i, y + k, 1, 1);
    }
  }
}

这是问题所在。使用(r,g,b,a)格式代替十六进制值之一会产生错误。 (期望RPAREN,找到',')我尝试创建使用rgba的颜色对象

static class Sprite{
  static color[][] test = new color[][]{
    {#FF0000, #00FF00},
    {#0000FF, #FFFFFF}
  };
}

可能用替换其中一个十六进制值,但它给了我同样的RPAREN错误。 (当使用十六进制代替时不会发生这种情况)

我想知道为什么不能在十六进制可以使用的地方使用rgba,以及是否有任何可能的解决方案。 rgb会产生相同的错误,因此我认为不透明本身不是问题。谢谢。

1 个答案:

答案 0 :(得分:0)

处理提供了一种创建图像并通过其 PImage 对象指定每个像素的颜色和透明度的方法。

换句话说,既然已经完成,您就可以废弃要尝试实现的内容。

作为示例,以下代码将创建不透明度为50%的红色方块。

PImage sprite;

void setup() {
   .
   .
   .
    sprite = createImage(100, 100, ARGB);
    for (int i = 0; i < sprite.pixels.length; i++) {
        sprite.pixels[i] = color(255, 0, 0, 128);
    }
   .
   .
   .
}

void draw() {
   .
   .
   .
    image(sprite, 0, 0);
   .
   .
   .
}

这具有缓存数据的额外优势,因此您无需遍历其像素即可在每一帧绘制精灵(不同于您的 renderSprite()方法)。