Processingでpoint()で画像を表示させたあともう一度表示させると前の画像の残像が残ってしまう。


カメラを付けたarduinoから画像の情報が送られてきて、それをpoint()で表示させるプログラムをprocessingで書いたのですが、画像を完全に表示し終わってから、もう一度画像を表示させると前回撮影した画像の残像が残ってしまいます。

下記のコードでは画像を表示し始める前に、グラデーションの画像を作成し、表示させてから撮影した画像を表示させています。

background(0);を使って初期化することも行ったのですが、  
background(255);と  
background(0);  
のように初期化する背景色によっても表示させる画像の色合いに影響が出てしまいます。
背景色を赤っぽくすれば画像も赤っぽくなりますし、背景色を青っぽくすれば画像も青っぽくなります。
1ピクセルずつに塗りつぶしていて影響がないはずなのになぜこのような現象が起こるのでしょうか？

[![画像の説明をここに入力](https://i.stack.imgur.com/rEXTD.png)](https://i.stack.imgur.com/rEXTD.png)[![画像の説明をここに入力](https://i.stack.imgur.com/jPWLg.png)](https://i.stack.imgur.com/jPWLg.png)

[code]

    import processing.serial.*;
    
    Serial port;
    
    int start=0;
    
    int h=240;
    int w=320;
    int count=0;
    int pixel=0;
    
    void setup()
    {
      size(320, 240);
      port = new Serial(this, "COM4", 1000000);
      frameRate(300000);
      stroke(0);
      rectMode(CENTER);
    }
    
    void keyPressed() {
      port.write(key);
    }
    
    void draw()
    {  
    
      // シリアルポートからデータを受け取ったら
      if (port.available() > 0 ) {
        int c=port.read();
        if (c==118) { //v
          start=1;
          println("start");
          //background(255);
    
          //グラデーション背景色確かめ
          for (int i=0; i<h; i++) {
            for (int j=0; j<w; j++) {
              stroke(color(i, j, j));
              point(j, i);
            }
          }
        } else if (c==122) { //z
          println("end");
          println("count");
          println(count);
          count=0;
          start=0;
        } else if (start>0) {
          count=count+1;
    
          String s=str(char(c));
          int f=unhex(s);
          //println(hex(f));
    
          if ((count)%4==1)pixel += f*4096;
          if ((count)%4==2)pixel += f*256;
          if ((count)%4==3)pixel += f*16;
    
          if ((count)%4==0) {
            pixel += f;
    
            int R=0;
            int G=0;
            int B=0;
    
            if (pixel%2==1)G+=32;
            if ((pixel>>1)%2==1)G+=65;
            if ((pixel>>2)%2==1)G+=130;
            if ((pixel>>3)%2==1)R+=8;
            if ((pixel>>4)%2==1)R+=16;
            if ((pixel>>5)%2==1)R+=33;
            if ((pixel>>6)%2==1)R+=66;
            if ((pixel>>7)%2==1)R+=132;
            if ((pixel>>8)%2==1)B+=8;
            if ((pixel>>9)%2==1)B+=16;
            if ((pixel>>10)%2==1)B+=33;
            if ((pixel>>11)%2==1)B+=66;
            if ((pixel>>12)%2==1)B+=132;
            if ((pixel>>13)%2==1)G+=4;
            if ((pixel>>14)%2==1)G+=8;
            if ((pixel>>15)%2==1)G+=16;
    
            int x=16;
    
            stroke(color(R, G, B));
            point((count-132)/4%320, (count-132)/4/320);
            pixel=0;
          }
        }
      }
    }
    
[/code]




arduino を現在持っていないので、確認することができませんが、  
この現象は arduino は関係なく processing の特徴（？）ではないでしょうか？

[code]

    void draw() {
      background(0);
    
      以下略
    
[/code]

というようにバックグラウンドをクリアする命令を draw() の中に入れてみてください。  
前の状態がクリアされます。

参考までに  
[Processing入門6](http://www.cp.cmc.osaka-u.ac.jp/%7Ekikuchi/kougi/simulation2009/processing6.html)  
にも前に描いたものが残ることが記載されています。

もしくは、drawのはじめに入れるのではなく、やりたいことに応じて

`background(0);`

を適切な箇所にいれる必要があるかもしれません。

