for ( int x = 0; x < REAL_SIZE; ++x )
{
- p.Red() = r;
- p.Green() = g;
- p.Blue() = b;
- p.Alpha() = (Data::Iterator::ChannelType)((x*255.)/REAL_SIZE);
+ // note that RGB must be premultiplied by alpha
+ unsigned a = (Data::Iterator::ChannelType)((x*255.)/REAL_SIZE);
+ p.Red() = r * a / 256;
+ p.Green() = g * a / 256;
+ p.Blue() = b * a / 256;
+ p.Alpha() = a;
++p; // same as p.OffsetX(1)
}