Advertisement
Guest User

SOS! ALARME! Ююка помоги. Ююка помоги. Ююка помоги.

a guest
Dec 2nd, 2020
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.73 KB | None | 0 0
  1.  //*1
  2. //Это метод которым я рисую прямоугольник и присваиваю в Image.Source
  3. public static ImageSource DrawRectangleWpf(Bitmap bitmapImage, Point start, Point end)
  4.         {
  5.             Graphics g = Graphics.FromImage(bitmapImage);
  6.             System.Drawing.Pen pen = new System.Drawing.Pen(borderColor, borderWidth);
  7.             var startX = Convert.ToSingle(start.X);
  8.             var startY = Convert.ToSingle(start.Y);
  9.             var width = Convert.ToSingle(end.X - start.X);
  10.             var height = Convert.ToSingle(end.Y - start.Y);
  11.             g.DrawRectangle(pen, startX, startY, width, height);
  12.             return ImageSourceFromBitmap(bitmapImage);
  13.         }
  14. //Конверт с битмапа в Image который я использую для метода прямоугольника выше
  15.         [DllImport("gdi32.dll", EntryPoint = "DeleteObject")]
  16.         [return: MarshalAs(UnmanagedType.Bool)]
  17.         public static extern bool DeleteObject([In] IntPtr hObject);
  18.         public static ImageSource ImageSourceFromBitmap(Bitmap bmp)
  19.         {
  20.             var handle = bmp.GetHbitmap();
  21.             try
  22.             {
  23.                 return Imaging.CreateBitmapSourceFromHBitmap(handle, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
  24.             }
  25.             finally { DeleteObject(handle); }
  26.         }
  27. //Конверт с байт массива (который хранится в базе данных) в bitmap. Этот костыль мне нужен по той причине что после рисования прямоугольника - картинка становится bitmap и она после метода выше стает новых размеров, а следовательно все старые координаты становлятся невалидными (да, они мне нужны).
  28. public static Bitmap ByteToBitmap(byte[] imageData)
  29.         {
  30.             using (var ms = new MemoryStream(imageData))
  31.             {
  32.                 return new Bitmap(ms);
  33.             }
  34.         }
  35.  
  36. //*2
  37. //Непосредствено код загрузки в Image
  38.  
  39. //Картинка которая должна загрузиться на 1 секунду
  40. Image.Source = DrawRectangleWpf(ByteToBitmap(_someEnityImagesCollection[i].SomeByteArrayPicture),
  41.                     StartPoint,
  42.                     EndPoint);
  43. //Загрузка следующей картинки кодом ниже (которую я все никак не могу логически отделить от загрузки выше)
  44. i++;
  45. Image.Source = ImageSourceFromBitmap(ByteToBitmap(_someEnityImagesCollection[i].SomeByteArrayPicture));
  46.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement