GDI+入门

GDIJavaIntro:GDI Java 类存储库介绍 GDIJava简介 GDI Java 类存储库介绍 立即下载

一、GDI简介
     GDI是位于停用程序与不同硬件之间的中间层。这种结构让程序员从直接处理不同硬件的工作中解放出来,把硬件中的差异交给了GDI处理。GDI通过将应用程序与不同输出设备特性香格里,使WINDOWS应用程序能够毫无障碍地在Windows支持的任何图形输出设备上运行。GDI+则是GDI的增强版本,对GDI进行了很大的改进。GDI+允许你创建独立于设备的应用程序,也就是说不用考虑应用程序将在什么样的硬件上运行。

二、GDI+的编程模式变化
     "GDI used a stateful model.whereas GDI+ uses a stateless"---GDI是有状态的,而GDI+是无状态的。
1、不再使用设备环境或句柄
     使用GDI+绘图时vubi像GDI那样指定一个环境设备(DC),取而代之是使用Graphics对象。Graphics对象与一个设备环境句柄存在联系(HDC),而其余的Pen、Brush、Image和Font等对象则不再使用环境设备。
2、对象是图形对象独立的
     画笔等对象与用于提供绘制方法的图形对象分别创建与维护,Graphics绘图方法直接将Pen对象作为参数哦,从而避免了使用SelectObject进行繁琐的切换。
3、取消“当前位置”
     GDI+绘图取消了GDI中的默认的“当前位置”,直接在DrawLine中指定了直线起止点的坐标。
4、绘制与填充
     在GDI中,形状轮廓绘制和填充使用的是同一个函数,例如Rectangle,无论我们是否需要填充绘制的图形,都需要分别指定一个画笔和一个画刷。而GDI+中轮廓的绘制和填充则分为了不同的方法,例如DrawRectangle和FillRectangle分别用来绘制和填充矩形。
5、多图片格式的支持
     GDI+提供了对各种图片的打开和存储功能。通过GDI+,我们能够直接将一幅BMP文件存储成JPG或其他格式的图片文件。

三、在VS中使用GDI+
1.添加GDI+的支持
//引入GDI+头文件
#incldue "gdiplus.h"
//使用GDI+的命名空间
using namespace Gdiplus;
2.添加成员变量
//全局变量,用来作为GDI+标识,在关闭时使用。
ULONG_PTR gdiplusToken;
3.重写ExitInstance,添加GDI+的关闭代码:
GdiplusShutdown(gdiplusToken);
4.重写InitInstance,添加GDI+的初始化代码:
GdiplusStartupInput gdiplusStartupInput;
GdiplusStartup(&gdiplusToken,&gdiplusStartInput,NULL);

四、GDI+例子
1.使用GDI+输出文本
//获取窗口句柄
CDC *pDC = GetDC();
HDC hDlgDC = pDC->m_hDC;
//建立Graohics对象
Graphics graphics(hDlgDC);
//建立画笔、画刷、字体等对象
Pen pen(Color(255,0,0,255));
SolidBrush brush(Color(255,0,0,255));
FontFamily fontFamily(_T("宋体"));
Font font(&fontFamily,24,FontStyleRegular,UnitPixel);
//在窗口中间输出文本
CRect rect;
GetClientRect(&rect);
PointF pointF(rect.right/2,rect.botton/2);
graphics.DrawString(_T("GDI+程序示意",-1,&font,pointF,&brush));

2.在打印机中进行GDI+操作
void CGDISINGLEView::OnPrintOut()
{
     RedrawWindow();
     DOCINFO docInfo;

     //清空文档信息
     ZeroMemory(&docInfo,sizeof(DOCINFO));     
     docInfo.cbSize = sizeof(DOCINFO);     

     //打印文档名
     docInfo.lpszDocName = _T("GdiplusPrint");

     //建立打印对话框
     PRINTDLG printDlg;
     ZeroMemory(&printDlg, sizeof(PRINTDLG));
     printDlg.lStructSize = sizeof(PRINTDLG);

     //需要返回DC
     printDlg.Flags = PD_RETURNDC;

     //显示打印对话框
     if (!PrintDlg(&printDlg))
    {
     AfxMessageBox(_T("建立打印对话框失败"));
     return;
     }
     else
     {
          //使用由打印对话框返回的设备环境句柄进行GDI+的所有操作
          //开始记录文档
          StartDoc(printDlg.hDC, &docInfo);
          StartPage(printDlg.hDC);
          //使用打印机设备环境句柄建立绘图平面类
          Graphics graphics(printDlg.hDC);
          //以下所有的输出都在打印机设备句柄中进行
          //加载图片
          Image image(L"sonnic.bmp");
          //绘制图片
          graphics.DrawImage(&image, 0.0f, 0.0f);

          Pen pen(Color(255,0,0,0));
          //画矩形
          graphics.DrawRectangle(&pen,200,500,200,150);
          //画椭圆
          graphics.DrawEllipse(&pen,200,500,200,150);
          //画直线
          graphics.DrawLine(&pen,200,500,400,650);
          //开始打印
          EndPage(printDlg.hDC);
          EndDoc(printDlg.hDC);
          }

          //释放打印资源
          if (printDlg.hDevMode)
          GlobalFree(printDlg.hDevMode);
          if (printDlg.hDevNames)
          GlobalFree(printDlg.hDevNames);
          if (printDlg.hDC)
          GlobalFree(printDlg.hDC);
}

GDI+入门教程GDIPlus 非常不错的GDI+入门教程,适合初学者学习,word格式 立即下载

相关推荐

GDI GDI+从入门到精通

GDI GDI+从入门到精通,课件PPT,包含一、二、三、四、五讲。

c++ GDI+ 初始化

首先创建一个基于对话框的MFC程序,然后把下面两个文件分别保存为.h文件和 .cpp文件 //InitGdiplus.h #pragma once #include <GdiPlus.h> using namespace Gdiplus; class CInitGdiplus { public: CInitGdiplus(void); ~CInitGdiplus(void); private: ULONG_PTR m_GdiplusToken; Gdipl...

sky_lixf专栏 460

GDI GDI+从入门到精通(vc大讲堂)

用于记录GDI开发所用的基础知识,可以用于以后遇到相关问题时用于查看。

(2356)SDK中使用GDI+出现的编译问题解决方案

SDK中使用GDI+出现的编译问题解决方案 GDI+是从windows XP开始提供的图形库,基于GDI构建 在MFC中使用GDI+,编译时不会出现什么大的问题,但是SDK中却会报告很多未定义的类型,其中主要是和COM有关的声明,这里就这一小问题进行解决。 首先要知道,GDI+是操作系统提供的模块,不和特定的编程语言和库相关联,所以纯净的SDK中是肯定可以使用GDI+的 其次,使用...

356

保姆级教程:在Ubuntu 20.04上从源码编译Apollo自动驾驶平台(含GPU环境配置)

本文提供了一份详细的Ubuntu 20.04上从源码编译Apollo自动驾驶平台的保姆级教程,包括GPU环境配置、Docker部署和编译构建等关键步骤。通过实战经验和避坑指南,帮助开发者高效完成Apollo平台的编译和验证,适用于自动驾驶技术研究和应用开发。

weixin_30876945的博客 409

从宏观到街道:如何利用七普数据为WorldPop人口栅格做“本地化”校准?

本文探讨了如何利用第七次全国人口普查(七普)数据对WorldPop人口栅格进行本地化校准,以提高街道级别的人口分布精度。通过分析数据偏差、选择适当的技术路线和工具(如Arcgis和栅格计算器),文章详细介绍了从宏观到街道的校准实践,帮助规划公共卫生资源和优化城市基础设施。

janckywong963的专栏 513

MFC使用GDI+编程基础【收集整理】

一、MFC使用GDI+编程设置   (1)增加静态库文件GdiPlus.lib 在VC2005“项目/*属性”菜单项,打开项目的属性页窗口,先选“所有配置”,再选“配置属性/链接器/输入”项。在右边上部的“附加依赖项”栏的右边,键入GdiPlus.lib 后按“应用”钮,最后按“确定”钮关闭对话框。 当然,我们也可以在代码中使用#pragma comment( lib, "gdiplus.

兵仔贾---的专栏 1964

谷歌账号国家或地区设置修改全攻略:条件、流程与避坑指南

谷歌账号的国家或地区设置与付款资料、账号历史行为及登录环境强绑定,修改时需满足特定条件。其原理在于地区作为索引键,关联内容库、货币结算和风控策略。正确切换可解决内容推荐错乱、付款失败等问题,适用于搬家、订阅区域限定服务等场景。操作前需在目标地区创建付款资料、清空余额并取消订阅,且一年仅能修改一次。本文详解从准备到验证的完整流程,并揭示官方文档未提及的实操陷阱,助你安全完成地区切换。

weixin_42521558的博客 2400

[GDI+] 创建Images的两种方式

使用Bitmap构造完成一个新的image对象,大小为xsize,ysize [C#]BitmapmyImage=newBitmap(<xsize>,<ysize>); [VB]DimMyImageAsnewBitmap(<xsize>,<ysize>)下面这个方法创建一个默认颜色深度的Images对象,也可以使...

378

【读代码】SQLBot:开源自然语言转SQL智能助手原理与实践

SQLBot是 DataEase 团队开源的自然语言转 SQL 智能助手,致力于让非技术用户也能通过自然语言与数据库对话,自动生成 SQL 查询,实现自助数据分析、智能BI问答、报表生成等场景。SQLBot 结合了大语言模型(LLM)、数据库元数据解析、SQL解析与执行等多项技术,具备强大的多数据库适配能力和灵活的扩展性。降低数据分析门槛,让业务人员无需掌握SQL即可获取数据洞察支持多种数据库类型,适应企业多样化数据环境提供可扩展的API和插件机制,便于集成到各类BI、数据平台和业务系统。

kakaZhui的博客 829

汇川Easy系列PID_AT指令弹簧质量阻尼系统闭环控制仿真测试

汇川Easy系列PLC系统PID指令(温度控制PID应用编程)

RXXW_Dor的博客 766

总结GDI+使用方法

开发中难免会用到GDI和GDI+,用的时候都是

xuqiang918的专栏 1170

Vue3+Openlayers教程导航页【目录】

欢迎来到 Vue3+Openlayers 系列教程,这里是我在 优快云 编写的所有 Vue3+Openlayers 系列相关文章的索引页,适合初学者到进阶用户系统阅读。👀 更多教程正在持续更新中,欢迎关注我,一起探索 Openlayers 的强大魅力!

小彭的博客 1276

【转】VB6 GDI+ 入门教程(1)—— GDI+介绍

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明 http://vistaswx.blogbus.com/logs/37178452.html 引言:鉴于网上关于GDI+的教程都是.Net的,基本上没有VB6.0的,而这方面又很多人有需要,所以我就写一个Visual Basic 6 GDI+ 入门教程。 目标人群:所有能够较熟练使用VB的,对GDI+感兴趣或有GDI+

几罗星人的专栏 5697

LeRobot 入门教程(十三)集成自定义的机器人、相机等硬件

本文详细介绍了如何将自定义机器人集成到LeRobot生态系统的完整流程。主要内容包括:1)硬件准备与通信接口选择;2)继承Robot基类实现标准接口;3)定义观察特征和动作特征;4)处理设备连接/断开逻辑;5)支持校准与配置;6)实现核心传感器读取和动作发送功能;7)可选遥操作器集成;8)遵循4项规范打包自定义设备(命名前缀、类名对应、文件结构、模块暴露);9)提供了完整实现示例。通过该方案,开发者可让自定义机器人兼容LeRobot的数据采集、控制管道和策略训练等全套工具链。

2506_90492529的博客 1902

PCL 欧式聚类分割【2026最新版】

PCL中欧式聚类提取算法原理详解、代码实现以及一个大自然场景地物分割提取并保存分割结果到本地文件夹的应用案例。

点云侠的博客 40万+

[C#]GDI+入门(一)

画线条 获取一个绘图对象 Graphics g = control.CreateGraphics();//在控件中获取绘图对象 创建画笔对象 Pen pen = new Pen(Color.Black,3); 在画布上画一条直线 Point p1 = new Point(0, 0); Point p2 = new Point(50, 50); g.DrawLine(pen, p1, p2);//画一条从(0,0)到(50,50)的直线 绘制字符串 Font font = new

wuqinglaohao的博客 351

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

《GDI/GDI+从入门到精通》视频教程

http://www.vckbase.com/index.php/video/listview/fid/42/sid/43 我花了6个小时看完了整套视频,发现自己可以进入到实际工作中去做图形图像编程了,我自己拿了一个实际题目测试了一下,居然可以轻松地实现出来了。如果换作以前,6个小时我才看完一本书的第一章节呢。 主讲人是UIPower的阙总,他对函数的讲解非常的通俗易懂,以一种直观的方

zqckzqck的专栏 9467

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

原创]Windows Gdi入门初级应用(VC SDK)

原创]Windows Gdi入门初级应用(VC SDK)   好久没发贴了,今天手痒痒,发一个。GDI的绘图函数基本上都是有状态的,所有的函数都要求一个HDC类型的句柄。这个HDC的获得有几个途径BeginPaint,GetWindowDC, GetDC.他们的参数都只需要一个HWND就差不多了。记得调用了BeginPaint后要调用EndPaint进行清理,调用GetWindowDC和Get

小发猫 2126

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

GDI+入门(Starting with GDI+)

http://www.codeproject.com/KB/GDI-plus/startinggdiplus.aspx 绪论我现在已经使用GDI+大概一周了,并且我不得不说GDI+是一个受欢迎的改良产品。我在写一个画图程序,很多我考虑的事情我都必须得自己写下来确认,这就意味着我可以“免费”得到它们。 很多我考虑过的事情,我都要确认自己写下来了,这就意味着我可以“免费”得到它们。我猜这样

Gary's Blog --- A C++ programmer 2262

VB6GDI入门教程最新版:掌握VB6环境下GDI+开发的核心技能

VB6GDI入门教程最新版:掌握VB6环境下GDI+开发的核心技能 去发现同类优质开源项目:https://gitcode.com/ 在使用Visual Basic 6 (VB6) 进行图形界面开发时,GDI+ 是一个不可或缺的技术。本文将为您详细介绍一个功能强大的开源项目——VB6 GDI+入门教程(最新版),帮助您轻松掌握VB6环境下GDI+的核心功能与场景。 项目介绍 VB6 GDI+入门教...

gitblog_06756的博客 392

VB6 GDI+入门教程(最新版)

VB6 GDI+入门教程(最新版) 去发现同类优质开源项目:https://gitcode.com/ 欢迎使用《VB6 GDI+入门教程》!本教程专注于介绍如何使用VB6进行GDI+的开发,旨在为广大开发者提供一个功能强大且实用的学习资源。 简介 GDI+作为GDI的升级版本,它在Windows XP及以后版本的Windows操作系统中得到了应用。GDI+相比传统GDI,提供了更为丰富的绘图功能和...

gitblog_06797的博客 402

MFC GDI+入门

1、GDI和GDI+区别 GDI GDI+ 的区别 - DoubleLi - 博客园GDI+是GDI的下一个版本,它进行了很好的改进,并且易用性更好。GDI的一个好处就是你不必知道任何关于数据怎样在设备上渲染的细节,GDI+更好的实现了这个优点,也就是说,GDI是一个中低层API,你https://www.cnblogs.com/lidabo/p/3701252.html 2、MFC 初始化GDI+ MFC 初始化 GDI+_jiangqin115的专栏-优快云博客1. 在stdafx.h文件中

tajon1226的专栏 2255

GDI 编程入门

Window下的GDI编程

记录生命的轨迹 4539

GDI + 绘图编程轻松入门

基础二维绘图(Windows Forms 应用)。高级图形效果(渐变、变换、抗锯齿)。图像处理(滤镜、格式转换、像素操作)。Windows Forms 应用中的自定义绘图。WPF 应用中的现代 UI 设计和动画效果。精细控制文本渲染质量。文档打印功能。应用场景:Windows 桌面应用、GDI + 绘图、GUI 界面开发等。定义原点位置:屏幕左上角(0, 0)。坐标轴方向X 轴:从左向右递增。Y 轴:从上向下递增(与数学坐标系相反)。单位:像素(Pixel),与显示器分辨率直接相关。

2301_79760264的博客 925

Windows Gdi入门初级应用

Windows Gdi入门初级应用(VC SDK)  GDI的绘图函数基本上都是有状态的,所有的函数都要求一个HDC类型的句柄。这个HDC的获得有几个途径BeginPaint,GetWindowDC, GetDC.他们的参数都只需要一个HWND就差不多了。记得调用了BeginPaint后要调用EndPaint进行清理,调用GetWindowDC和GetDC后要调ReleaseDC进行清理。在M

飞鹰 840
上一篇: vim常用命令
下一篇: 位图的保存
火VVVVV
博客等级 码龄16年 87粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值