0

In my application i want to drawing a rectangle on image box using bitmap called myBitmap. and the problem is how to use System.Drawing.bitMap as source for image in C# Wpf .

   private void MyRectangle(System.Drawing.Point p1, System.Drawing.Point p2)
    {
        int var1,var2;
        var1 = Convert.ToInt16(image1.Width);
        var2 = Convert.ToInt16(image1.Height);

        System.Drawing.Bitmap myBitmap = new System.Drawing.Bitmap(var1,var2);

        using (Graphics g = Graphics.FromImage(myBitmap))
        {
            g.Clear(Color.LightBlue);
            g.DrawRectangle(new Pen(Brushes.Red),p1.X, p1.Y, p2.X - p1.X, p2.Y - p1.Y);
        }


      // this.image1.Source = myBitmap;

    }
user3413736
  • 163
  • 1
  • 4
  • 11
  • you may perhaps use shape classes or event geometry in this scenario unless bitmap is the a extreme necessity. – pushpraj Jul 16 '14 at 07:08
  • Do not use WinForms bitmaps in a WPF application. Use [WriteableBitmapEx](http://writeablebitmapex.codeplex.com/) instead. – Clemens Jul 16 '14 at 07:54

1 Answers1

2

Convert it to BitmapSource, use the BitmapSource as the Source of your Image control.

    public static BitmapSource ConvertToBitmapSource(Bitmap bitmap)
    {
        if (bitmap == null)
            return null;
        //BitmapImage b=new BitmapImage();
        BitmapSource bitSrc = null;
        var hBitmap = IntPtr.Zero;


        try
        {
            hBitmap = bitmap.GetHbitmap();
            bitSrc = Imaging.CreateBitmapSourceFromHBitmap(
                hBitmap,
                IntPtr.Zero,
                Int32Rect.Empty,
                BitmapSizeOptions.FromEmptyOptions());
        }
        catch (Win32Exception)
        {
            bitSrc = null;
        }
        catch (ArgumentException)
        {
            if (hBitmap != IntPtr.Zero)
                DeleteObject(hBitmap);
            hBitmap = IntPtr.Zero;
        }
        catch
        {
            if (hBitmap != IntPtr.Zero)
                DeleteObject(hBitmap);
            bitSrc = null;
            hBitmap = IntPtr.Zero;
        }
        finally
        {
            //bitmap.Dispose();
            if (hBitmap != IntPtr.Zero)
                DeleteObject(hBitmap);
        }
        return bitSrc;
    }


    [DllImport("gdi32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    internal static extern bool DeleteObject(IntPtr hObject);
  • another method you can use public static BitmapImage ConvertToBitmapImage(Image bitmap) { if (bitmap == null) throw new ArgumentNullException("bitmap"); BitmapImage im = new BitmapImage(); try { im.BeginInit(); im.StreamSource = new MemoryStream(); bitmap.Save(im.StreamSource, ImageFormat.Png); im.EndInit(); } catch (Exception ex) { } return im; } – Mohamed Al-Hosary Jul 16 '14 at 06:54
  • And simply you can convert Bitmap to byte[] and bind to the byte[] directly – Mohamed Al-Hosary Jul 16 '14 at 06:54