protected override unsafe void OnUpdateFaderImage(Bitmap bmp)
		{
			if (bmp.PixelFormat != PixelFormat.Format32bppArgb) return;
			BitmapData bd = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height),
			                             ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb);
			ColorBgra* scan0 = (ColorBgra*) bd.Scan0;
			//draw fader image
			LAB curr = new LAB(0.0, _color.a, _color.b);
			double delta_L = 100.0/(double) bd.Width;
			for (int x = 0; x < bd.Width; x++, scan0++,curr.L += delta_L) {
				scan0[0] = ColorBgra.FromArgb(curr.ToXYZ().ToRGB());
			}
			//end
			bmp.UnlockBits(bd);
		}
 protected unsafe override void OnUpdatePlaneImage(Bitmap bmp)
 {
     if(bmp.PixelFormat!=PixelFormat.Format32bppArgb) return;
     BitmapData bd=bmp.LockBits(new Rectangle(0,0,bmp.Width,bmp.Height),
         ImageLockMode.WriteOnly,PixelFormat.Format32bppArgb);
     ColorBgra* scan0=(ColorBgra*)bd.Scan0;
     //draw plane image
     LAB curr=new LAB(100.0,_color.a,-128.0);
     double
         delta_L=-100.0/(double)bd.Height,
         delta_b=255.0/(double)bd.Width;
     for(int y=0; y<bd.Height; y++, curr.b=-128.0, curr.L+=delta_L)
     {
         for(int x=0; x<bd.Width; x++, scan0++,curr.b+=delta_b)
         {
             scan0[0]=ColorBgra.FromArgb(curr.ToXYZ().ToRGB());
         }
     }
     //end
     bmp.UnlockBits(bd);
 }