简体   繁体   中英

How to create ImageBrush from System.Drawing.Image in WPF?

I have image in System.Drawing.Image object and I need to create an ImageBrush object (used for Fill property of Rectangle in WPF for example) from it. I guess there should be a way to do this, but I can't find one.

      var image = System.Drawing.Image.FromFile("..."); // or wherever it comes from
      var bitmap = new System.Drawing.Bitmap(image);
      var bitmapSource = Imaging.CreateBitmapSourceFromHBitmap(bitmap.GetHbitmap(),
                                                                            IntPtr.Zero,
                                                                            Int32Rect.Empty,
                                                                            BitmapSizeOptions.FromEmptyOptions()
            );
      bitmap.Dispose();
      var brush = new ImageBrush(bitmapSource);          

This solution, however, doesnt free the memory of the handle. For information on how to remove the memory leak see WPF CreateBitmapSourceFromHBitmap() memory leak

<Rectangle  x:Name="RectangleName"                       
                StrokeThickness="1" 
                HorizontalAlignment="Stretch" 
                VerticalAlignment="Stretch" 
                Width="200"
                Height="300"
                Stroke="Black" >
        <Rectangle.Fill>

                <ImageBrush ImageSource="{Binding SelectedComponentsImage}"  x:Name="ComponentVisualBrush" ViewboxUnits="Absolute" 
                Viewbox="0,0,300,300" ViewportUnits="RelativeToBoundingBox" Stretch="UniformToFill" Viewport="0,0,1,1" 
                RenderOptions.EdgeMode="Aliased"  />

        </Rectangle.Fill>
</Rectangle>

This is with viewmodel Binding. You can replace the Binding with an image uri.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM