тень становится темнее на растровом изображении - PullRequest
1 голос
/ 12 сентября 2011

Я пытаюсь создать тень на прямоугольник, динамически нарисованный на растровом изображении. Проблема в том, что тень становится темнее каждый раз, когда я рисую новый прямоугольник (см. Скриншот). Я подозреваю, что это же растровое изображение используется для рисования новых прямоугольников. Я попытался использовать Graphics.clear (), но он очищает экран, который я не хочу.
Как можно решить эту проблему?
Вот код, который рисует тень:

public void drawAll(Rectangle baseRect,Graphics g)
{
  int shadWidth = 10;   
  Bitmap bm = new Bitmap(shadWidth, baseRect.Height+shadWidth);//baseRect is created dynamically
  for (int y = 0; y < baseRect.Height + shadWidth; y++)
  {
     int factor = 255 / shadWidth;//255 is the alpha color divided over the shadow width
     int alpha = 255;
     for (int x = 0; x < shadWidth; x++)
      {
         alpha -= factor;
         if (alpha < 0) alpha = 0;
         Color transColr = Color.FromArgb(alpha, 0, 0, 0);
         bm.SetPixel(x, y, transColr);
       }
   }
  GraphicsPath path = new GraphicsPath();
  PointF[] pts = new[] {new PointF(baseRect.Right, baseRect.Top),
               new PointF(baseRect.Right+shadWidth, baseRect.Top+shadWidth),
               new PointF(baseRect.Right+shadWidth, baseRect.Bottom+shadWidth),
               new PointF(baseRect.Right, baseRect.Bottom),
               new PointF(baseRect.Right, baseRect.Top)};
  path.AddLines(pts);
  SmoothingMode old = g.SmoothingMode;
  g.SmoothingMode = SmoothingMode.AntiAlias;
  g.DrawImageUnscaled(bm, baseRect.Right, baseRect.Y);
}

enter image description here

...