Работа с BitmapData - C#

Узнай цену своей работы

Формулировка задачи:

пишу подобие Paint'а. В одном из обработчиков использую BitmapData. вроде все правильно, однако на код:
 int x1, x2, y1, y2;
 x1 = pst.X > pfn.X ? pfn.X : pst.X;
 x2 = pst.X < pfn.X ? pfn.X : pst.X;
 y1 = pst.Y > pfn.Y ? pfn.Y : pst.Y;
 y2 = pst.Y < pfn.Y ? pfn.Y : pst.Y;
 BitmapData bmpdt = (tpb.Image as Bitmap).LockBits(new Rectangle(x1, y1, x2 - x1, y2 - y1), ImageLockMode.ReadWrite, (tpb.Image as Bitmap).PixelFormat);
 byte[] bt = new byte[bmpdt.Stride * bmpdt.Height];
tpb - pictureBox pst- Point начало pfn - Point конец gtpb - Graphics для tpb выскакивает ошибка
************** Exception Text **************
System.ArgumentException: Parameter is not valid.
   at System.Drawing.Bitmap.LockBits(Rectangle rect, ImageLockMode flags, PixelFormat format, BitmapData bitmapData)
   at System.Drawing.Bitmap.LockBits(Rectangle rect, ImageLockMode flags, PixelFormat format)
или если можете предложите другой способ "зачистки" прямой линии соеденяющей точки pst и pfn.
gtpb.DrawLine(new Pen(Color.FromArgb(0), 1), pst, pfn);
почему-то не работает...
Нашел вариант
gtpb.Clear( Color.FromArgb(0,0,0,0));
 pfn = mea.Location;
 gtpb.DrawLine(Pens.Blue, pst, pfn);
 tpb.Invalidate();
Но это не совсем то что нужно, при работе линия мерцает. Можно ли от этого как либо избавиться?

Решение задачи: «Работа с BitmapData»

textual
Листинг программы
tpb.Invalidate();

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.714 из 5