A challenge about colours Above, you can see an image full of different colours.

Click here for a hex-dump.

One possible way to generate this image is by using a linear gradient rotated 90 degrees, however, this may not be the only way.

Your task is to create a self-contained program that takes no input, and outputs an image with the same RGBA pixels as the above image, and in the exact same location, with the output image being in a file format that was created before this challenge, with the dimensions of the image being 4096x4096px, same as the original. 

The shortest such program, scored in bytes, is the winner. 

Cheating and standard loopholes are not allowed.
Processing, 197 195 bytes
void setup(){size(255,255);int r=255,a=r,g=0,b=0,i,j,k;background(a);for(i=0;i&lt;a;k=i&lt;43?g+=6:i&lt;85?r-=6:i&lt;a/2?b+=6:i&lt;170?g-=6:i&lt;213?r+=6:a&gt;1?b-=6:0,i++)for(j=0;j&lt;a;point(i,j++))stroke(r,g,b,a-j);}

This outputs the image in a 255x255 sized window
Explained
void setup(){            //this is required
  size(255,255);         //size of sketch
  int r=255,a=r,g=0,b=0,i,j,k; //declaring our vars
  background(a);         //set the background colour as white
  //for-loop for the x-coordinates, it also increments/decrements rgb values
  //  based on the x-coordinate
  for(i=0;i&lt;a;k=i&lt;43?g+=6:i&lt;85?r-=6:i&lt;a/2?b+=6:i&lt;170?g-=6:i&lt;213?r+=6:a&gt;1?b-=6:0,i++)
    //for-loop for the y-coordinate (alpha)
    for(j=0;j&lt;a;point(i,j++))   //2) then draw the point at the location
      stroke(r,g,b,a-j);        //1) set the colour of point
}


Edits

Used int instead of float
THIS SOLUTION IS INVALID DUE TO NEW RULES BEING ADDED. I WILL UPDATE ANSWER SOON