首页 > 其他分享 >.net6.0及以上WPF中使用GDI+的demo

.net6.0及以上WPF中使用GDI+的demo

时间:2023-11-13 13:22:19浏览次数:47  
标签:IntPtr Windows demo System GDI 句柄 using WPF

using System;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows;
using System.Windows.Interop;
using System.Windows.Media.Imaging;

namespace TryDemo
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        [DllImport("gdi32.dll")]
        public static extern bool DeleteObject(IntPtr hObject);
        public MainWindow()
        {
            InitializeComponent();
            DrawWithGDIPlus();
        }
        private void DrawWithGDIPlus()
        {
            //install-package System.Drawing.Common
            //创建位图
            Bitmap bmp = new Bitmap(300, 200);
            using(Graphics g=Graphics.FromImage(bmp))
            {
                //创建一个画刷
                Brush brush = new SolidBrush(Color.Blue);
                //绘制矩形
                g.FillRectangle(brush, new Rectangle(50, 50, 200, 100));
                //释放资源
                brush.Dispose();
            }
            //将GDI+绘制的位图转换为WPF中的BitmapSource--------------------------------------------
            //GetHbitmap 方法是 Bitmap 类的一个方法,它会返回 GDI(图形设备接口)位图对象的句柄(HBITMAP)。
            //这个句柄是 Windows GDI 对象的一个标识符。这个方法创建一个 GDI位图对象,并返回其句柄。
            IntPtr hBitmap = bmp.GetHbitmap();
            //Imaging.CreateBitmapSourceFromHBitmap:
//Imaging.CreateBitmapSourceFromHBitmap 方法是 WPF 中的一个方法,用于创建 BitmapSource 对象,以便在WPF中显示图像。
//它接受 GDI位图对象的句柄(HBITMAP)作为输入,然后创建一个 BitmapSource 对象。
//参数解释:
//第一个参数是 hBitmap,即 GDI+位图对象的句柄。
//第二个参数是 IntPtr.Zero,用于传递对可选的色彩管理句柄的指针。在这里,我们没有使用颜色管理,所以传入了 IntPtr.Zero。
//Int32Rect.Empty 表示矩形的空区域,用于指定位图的可见区域。这里我们将其设置为空。
//BitmapSizeOptions.FromEmptyOptions() 用于指定位图大小选项,这里我们选择了空选项。
            BitmapSource bitmapSource = Imaging.CreateBitmapSourceFromHBitmap(
                hBitmap,
                IntPtr.Zero,
                Int32Rect.Empty,
                BitmapSizeOptions.FromEmptyOptions());
            DeleteObject(hBitmap);
            bmp.Dispose();
            System.Windows.Controls.Image image = new System.Windows.Controls.Image();
            image.Source=bitmapSource;
            this.Content = image;
        }
    }
}




标签:IntPtr,Windows,demo,System,GDI,句柄,using,WPF
From: https://www.cnblogs.com/johnyang/p/17828898.html

相关文章

  • 关于 Gdiplus api 调用的bug解决以及注意事项
    1.加入空间命,以识别这是Gdiplus的类与函数2.调用前需调用   Gdiplus::GdiplusStartupInputgsi;ULONG_PTRpToken;Gdiplus::Statuss=Gdiplus::GdiplusStartup(&pToken,&gsi,NULL);用完Gdiplus函数后调用Gdiplus::GdiplusShutdown(pToken);如果不调用,各个Gdiplus的类将......
  • 1. WPF DataBinding--概述
    数据绑定为应用程序提供了一种简单而一致的方式来表示数据并与之交互,UI元素可以绑定到不同的数据源(.net对象和XML),什么是数据绑定数据绑定是一个UI和它显示数据建立联系的过程。如果建立了正确的绑定,当数据发生变化并发出适当的通知时,UI元素也会自动跟着变化,当UI元素的数据表现发生......
  • WPF win10窗体背景模糊
    internalenumAccentState{ACCENT_DISABLED=0,ACCENT_ENABLE_GRADIENT=1,ACCENT_ENABLE_TRANSPARENTGRADIENT=2,ACCENT_ENABLE_BLURBEHIND=3,ACCENT_INVALID_STATE=4}[StructLayout(LayoutKind.......
  • WPF控件设计艺术1按钮与自定义控件设计总结
    框架.NET6.0编译器:vsCommunity2022基于C#大致框架代码分享纯文本按钮TextOnlyButton资源字典分享<ResourceDictionaryxmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">......
  • WPF-双向绑定
    在WPF中,现双向绑定:使用Binding元素的Mode属性设置为TwoWay。例如:<TextBoxText="{BindingPath=PropertyName,Mode=TwoWay}"/> ,这将将TextBox的值绑定到PropertyName属性,并且当TextBox的值更改时,将自动更新PropertyName属性的值。使用属性的依赖属性,可以在属性的元数据中......
  • 推荐WPF的好书(图书)
    英文:1《ProWPFinC#2008》MatthewMacDonald著,Apress出版。这本书,英文版1072页,在我看过的书中,此书绝对是排第一的,不仅全面而且深入,并且其实例应用性非常强。吐血推荐!5星级。2《ProgrammingWPF》ChrisSellsandIanGriffiths著,O'RELLY出版,在前一篇博文也介绍过。目前,我已把这......
  • WPF Video Tutorials
    WPFVideoTutorialsListofWPFvideotutorialsforfree…http://movielibrary.lynda.com/html/modPage.asp?ID=359http://www.bestechvideos.com/category/web-tech/wpf/http://windowsclient.net/learn/videos_wpf.aspx......
  • 02 WPF 常用控件
    02WPF常用控件基本控件使用Border控件在另一个元素四周绘制边框和/或背景(嵌套其他元素)<BorderWidth="300"Height="100"Background="Red"BorderBrush="Black"BorderThickness="10"CornerRadius="10,20,......
  • WPF控件,按钮名称分行显示的方法
    1、利用XML规则下的特殊字符和空格下面的字符在[XML]中被定义为空白(whitespace)字符: 空格【】Tab 【】回车 【】换行【】这里,为了实现分行,我们选择最后一个换行。比如:<ButtonWidth="100" Height="50" Click="Button_Click_2" Content="第一行&#x000A......
  • Flink CDC 同步 demo
    运行docker-compose.yml搭建数据库源,官方mysql样例数据源无法启动,改用其他mysql镜像version:'2.1'services:postgres:image:debezium/example-postgres:1.1ports:-"5432:5432"environment:-POSTGRES_PASSWORD=1234-POSTGR......