GDI+基础编程(1)

C#.net 地图控件开发(三) GDI+图形图像编程基础1. GDI+绘图基础        编写图形程序时需要使用GDI(Graphics Device Interface,图形设备接口),从程序设计的角度看,GDI包括两部分:一部分是GDI对象,另一部分是GDI函数。GDI对象定义了GDI函数使用的工具和环境变量,而GDI函数使用GDI对象绘制各种图形,在C#中,进行图形程序编写时用到的是GDI+(Graphice Device Interface P 阅读详情

首先是在我的VS2008里面配置GDI+库,以及初始化GDI+Lib,参见http://blog.sina.com.cn/s/blog_51e67b250100ebkp.html

然后进行一些比较基础的GDI+画笔、图像处理(详细请见注释)

 

void CGDIAppDlg::DrawImage1(CDC* pDC)
{
	//CDC* pDC=GetDC();
	Graphics g(pDC->m_hDC);
	Bitmap bm1(L"1.jpg");
	int width=bm1.GetWidth();
	int height=bm1.GetHeight();
	Bitmap* pBm=bm1.Clone(0,0,width,height,PixelFormatDontCare);
	g.DrawImage(pBm,0,0,width,height);
	g.DrawImage(&bm1,width+10,0,width,height);
	//进行毛玻璃的透明设置
	ImageAttributes imageAtt;
	ColorMatrix colorMatrix={
		1.0f,0.0f,0.0f,0.0f,0.0f,
		0.0f,0.1f,0.0f,0.0f,0.0f,
		0.0f,0.0f,1.0f,0.0f,0.0f,
		0.0f,0.0f,0.0f,1.0f,0.0f,
		0.0f,0.0f,0.0f,0.0f,1.0f
	};
	imageAtt.SetColorMatrix(&colorMatrix,ColorMatrixFlagsDefault,ColorAdjustTypeBitmap);
	g.DrawImage(&bm1,
		Rect(width*2+20,0,width,height),
		0,0,width,height,
		UnitPixel,
		&imageAtt);
	///////////////////////////////////////////////
	//绘制文字
	WCHAR str[256];
	wcscpy(str,L"Hello  GDI+");
	Font ft(L"Arial",30);
	StringFormat format;
	format.SetAlignment(StringAlignmentCenter);
	format.SetLineAlignment(StringAlignmentCenter);
	SolidBrush black(Color(255,255,0,0));
	RectF rc(10.0f,300.0f,300.0f,50.0f);
	g.DrawString(
		str,
		wcslen(str),
		&ft,
		rc,
		&format,
		&black);
	g.DrawRectangle(&Pen(Color(155,0,200),5),rc);
	Image bmp(L"1.bmp");
	TextureBrush textBrush(&bmp);//构造纹理画刷
	Pen textPen(&textBrush,30);
	//textPen.SetAlignment(PenAlignmentInset);
	g.DrawEllipse(&textPen,100,300,100,200);
	Pen red(Color(255,0,0),10);
	Pen green(Color(0,255,0),10);
	red.SetAlignment(PenAlignmentInset);
	g.DrawEllipse(&red,Rect(340,240,100,40));
	g.DrawEllipse(&green,Rect(340,240,100,40));
	/////////////////////////////////////////////////
	//画笔的缩放
	Pen p(Color(155,0,200));
	p.SetWidth(5);
	Matrix matrix(1,0,0,2,0,0);
	//p.SetTransform(&matrix);
	p.ScaleTransform(1,3);
	g.DrawRectangle(&p,Rect(300,500,100,40));
	//画笔的旋转
	Pen pen(Color::Blue,5);
	pen.ScaleTransform(1,6);//垂直方向扩充六倍,水平方向不变
	g.DrawEllipse(&pen,50,350,200,200);
	//依次旋转画笔
	pen.RotateTransform(60);
	g.DrawEllipse(&pen,50,50,200,200);
	pen.RotateTransform(120);
	g.DrawEllipse(&pen,260,50,200,200);
	pen.RotateTransform(180);
	g.DrawEllipse(&pen,260,350,200,200);
	////////////////////////////////////////////////
	//自定义画笔的画帽
	GraphicsPath sPath,ePath;
	//在路径中添加一个矩形
	sPath.AddRectangle(Rect(-10,-5,20,10));
	ePath.AddLine(0,-20,10,0);
	ePath.AddLine(0,-20,-10,0);
	ePath.AddLine(0,-10,10,0);
	ePath.AddLine(0,-10,-10,0);
	Rect rc1(10,-5,20,10);
	Pen p1(Color(255,0,0,255),3);
	CustomLineCap sCap(NULL,&sPath),eCap(NULL,&ePath);
	g.DrawLine(&p,420,30,300,30);
	for(float j=0.0f;j<6.28f;j+=0.15f)
	{
		g.DrawLine(&p1,600.0f,600.0f,600+200.0f*cos(j),600+200.0f*sin(j));
	}
	//////////////////////////////////////////////////////////////////
	//this->RedrawWindow();
//	enum LineJoin{斜接LineJoinMiter=0,斜切LineJoinBevel=1,圆形LineJoinRound=2,剪裁斜切LineJoinMiterClipped=3};
	Pen p2(Color(255,0,0,255),15);
	p2.SetLineJoin(LineJoinBevel);
	g.DrawRectangle(&p2,450,300,100,40);
	p2.SetLineJoin(LineJoinRound);
	p2.SetColor(Color(255,255,0,0));
	g.DrawRectangle(&p2,600,300,100,40);
	p2.SetLineJoin(LineJoinMiter);
	p2.SetColor(Color(255,155,0,200));
	g.DrawRectangle(&p2,750,300,100,40);
	p2.SetLineJoin(LineJoinMiterClipped);
	p2.SetColor(Color(255,0,255,0));
	g.DrawRectangle(&p2,900,300,100,40);
	///////////////////////////////////////////
	Point pt[4]={
		Point(500,10),
		Point(550,60),
		Point(650,110),
		Point(500,170),
	};
	g.SetSmoothingMode(SmoothingModeHighQuality);
	p2.SetLineJoin(LineJoinMiter);
	g.DrawLines(&p2,pt,4);
	/////////////////////////////////////
	pt[0].X+=100;
	pt[1].X+=100;
	pt[2].X+=100;
	pt[3].X+=100;
	p2.SetColor(Color(255,200,0,155));
	p2.SetLineJoin(LineJoinBevel);
	g.DrawLines(&p2,pt,4);
	//////////////////////////////////
	pt[0].X+=100;
	pt[1].X+=100;
	pt[2].X+=100;
	pt[3].X+=100;
	p2.SetColor(Color(255,0,200,155));
	p2.SetLineJoin(LineJoinRound);
	g.DrawLines(&p2,pt,4);
	///////////////////////////////
	pt[0].X+=100;
	pt[1].X+=100;
	pt[2].X+=100;
	pt[3].X+=100;
	p2.SetColor(Color(255,100,200,155));
	p2.SetLineJoin(LineJoinMiterClipped);
	g.DrawLines(&p2,pt,4);


}

这个函数的参数最好使用CPaintDC类型,以免绘制图像后刷新区域后消失

因此,我把这个函数放在CXXDlg::OnPaint()函数中


最后运行效果如下:(按照绘制的先后顺序,开始画的被覆盖住了)

gdi编程基础 一. DC 1. 概念 设备上下文:通俗来说就是,我们在绘图时用来响应软,硬件消息的媒介。MFC为我们封装了CDC类,那我们就结合MSDN来学习,就显得不会那么乱了。 2. CDC,CPaintDC, CClientDC, CWindowDC,CMetaFileDC CDC:DC的基类。 CPaintDC:跟进下源代码,发现本质上调用了BeginPaint()和E... 阅读详情

相关推荐

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

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

WINCOL的专栏 3521

GDI+编程(二)使用画笔

画笔常用于绘制图形的轮廓.GDI+的画笔除了具有常见的色彩和宽度属性外,还具有对齐方式,线帽,变换方式等属性。GDI+中通过Pen类来定义画笔对象。 (一)、构造与使用画笔 view source print? 1.Pen(brush, width);//用颜色与线宽构造一个画笔 2.Pen(color, width);//用画刷与宽度构造一个画笔

tianyu的专栏 - Linux site:blog.youkuaiyun.com/wishfly 1170

GdiplusFlat(1)GDI+平面API:用GDI的思想进行GDI+编程

坚信GdiplusFlat比Gdiplus好!我要在资料匮乏的GdiplusFlat上打下一片天地!没有api文档?我去百度找,就算把那些其他不支持GDI+类的语言中用GdiplusFlat的例子翻出来看,头文件里函数和结构没有声明?我自己声明!实在不行?我把你们这些GdiplusFlat函数一个个从dll里load进来直接动态调用!! GDI+(Gdiplus)想必大家都不陌生,MSDN给出的解释是 Windows GDI+ is a class-based API for C/C++ program

zuishikonghuan的博客 3912

1.GDI+ 常用方法详解

作为Windows图形系统基准的GDI存在诸多不足:Alpha通道支持较弱,不支持高级图像功能,抗锯齿能力差等等。为了解决这鞋问题,微软推出GDI+,使用非常方便,满足大多数场合需求。本文演示了常见GDI+函数使用。

文洲的专栏 3406

GDI+文字路径旋转实现指南

GDI+是Windows操作系统中的一个图形设备接口,它提供了丰富的功能来绘制二维图形、处理图像、格式化文本以及其它与显示有关的任务。它的出现简化了图形编程的工作,是开发者可以方便地利用各种各样的图形和文字处理功能来丰富用户界面。GDI+在继承了旧版GDI(图形设备接口)的一些功能的同时,也引入了对Alpha混合、高质量图形绘制和复杂的变换等现代图形技术的支持。

weixin_35391606的博客 964

C++自学指南:掌握GDI和GDI+图形编程

色彩管理是图像处理中的一个重要组成部分,特别是在图形用户界面和打印领域中。GDI+支持多种色彩模型,如RGB和CMYK。RGB(红绿蓝)模型是加色模型,常用于计算机屏幕和其他电子显示设备。它通过红、绿、蓝三原色的组合和光的加法混合生成广泛的色彩。CMYK(青、品红、黄、黑)模型是减色模型,通常用于印刷和打印行业。它使用青、品红、黄和黑色油墨吸收光线,从而形成不同的颜色。在GDI+中,根据不同的输出需求,我们可以灵活选择不同的色彩模型。

weixin_42589700的博客 1283

GDI+ 文本格式化设置

GDI+ 文本格式化设置

编程猿来如此 1455

github-globe:Github主页上的地球仪在ThreeJS中实现,并带有漂亮的阴影

Github地球仪 灵感 这个项目的灵感来自,在上他们在全球地图上显示了实时的Github活动。 执行 地球构造有,通过由ThreeJS数据可视化项目 。 然后,用昏暗的环境光和多个定向光将场景阴影化,以类似于梦幻般的太空环境。 还调整了地球仪的MeshPhongMaterial以适应环境。 我所有出席/取消的航班(2019-2020年)都显示在地球上。 如果您尝试沿一条弧线行驶,那将是我旅行目的地的顺序。 红色弧线表示取消航班。 文献资料 如果要编辑Globe对象以添加数据可视化,请访问浏览器以获得详细文档。 说到“发光”, three-globe不允许您访问发光网格对象,因此默认发光被关闭,而是向场景中添加了一个单独的“ three-glow-mesh 。 用法 该项目与捆绑在一起: " build " : " webpack --config=webpack.prod.js " ,

C#高亮显示TreeView控件中的选中项

问题描述   给自己单位开发的应用程序,里面有个功能是使用C#中的GDI+功能开发的在固定区域显示指定内容。   最初实现起来很简单,因为显示内容的区域大小是固定的,要显示的内容的字体和字号也是固定的,直接使用Graphics类中的DrawString方法就可以搞定。效果如下图所示:   用户使用这个模块已经有一段时间了。最近突然提出来在这个区域中显示的内容要加长,这样的话再使用固定的字...

gc_2299的博客 2814

BeautyGAN: Instance-level Facial Makeup Transfer with Deep Generative Adversarial Network(2018,妆容迁移)

论文下载地址:BeautyGAN | Proceedings of the 26th ACM international conference on Multimedia 目的:在实例级实现化妆图像和非化妆图像的妆容迁移 方法:全局域集损失和本地实例级损失合并到一个双输入/输出对抗生成网络。步骤:使用一对鉴别器将非化妆面传输到化妆域,鉴别器从域的真实样本中分辨出生成的图像。在域集迁移的基础上,采用基于不同人脸区域的像素级直方图损失来实现实例级迁移。为了保持人脸的一致性和消除伪影,在总体目标函数中加入了.

weixin_53965540的博客 663

树莓派4B学习笔记一

树莓派4b烧录Ubuntu20.04&&配置Ubuntu桌面

m0_55202222的博客 3639

C图像处理工具:GDI+实现高质量图像处理

C#图像处理工具:GDI+实现高质量图像处理 去发现同类优质开源项目:https://gitcode.com/ 本仓库提供了一个基于C#和GDI+(Graphics)的图像处理工具,实现了高质量的缩略图生成、图像压缩优化、任意角度旋转以及透明水印添加等功能。该工具是项目实际积累的成果,适用于需要进行图像处理的各类应用场景。 功能特点 高质量缩略图生成:支持生成高质量的缩略图,保持图像细节的同时缩...

gitblog_09789的博客 995

从STM32转战小华HC32F448:手把手教你搞定串口复用与超时中断(附完整代码)

本文详细介绍了从STM32迁移到小华HC32F448的串口开发实战指南,重点解析了HC32F448的GPIO复用系统和超时中断机制。通过对比STM32的架构差异,提供了完整的串口配置代码和优化方案,帮助开发者快速掌握HC32F448的串口通信技术,适用于工业控制等应用场景。

weixin_30564901的博客 548

GDI+编程基础1

本文参考:《精通GDI+编程》 一、GDI是什么 GDI+是Windows操作系统的图像引擎,负责在屏幕和打印机上显示和打印消息。           是一个应用编程接口,通过一组C++类来提供接口的功能。           是早期图形设备接口GDI的继任者。 二、GDI体系 GDI+的工作原理及其在操作系统中所扮演的角色,如下图 GDI+所包含的内容: 1、二位几何图形的处

s110600824s的专栏 842

3. 动手运行第一个 SAP Fiori Elements 应用(ListReport 类型)

这个代理服务器能够自动监听我们 Fiori Elements 应用里向 ES5 Demo 系统发送的 OData 请求,拦截这个请求,并通过 Node.js 代码向 ES5 服务器转发,拿到响应数据后再交还给 Fiori Elements 应用。后者对自己发出的请求被代理这件事情一无所知。本文的任务是,大家按照我的介绍,在本地成功运行笔者准备的这个 Fiori Elements 应用。的错误消息, 说明大家安装的 Node.js 版本没有达到本地运行 Fiori Elements 的最低要求。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1671

第10章 shellcode实战:18 神级开源shellcode工具:donut

Donut是一款shellcode生成器,可将C/C++、C#生成的PE文件转换为shellcode文件,同时支持JS、XSL、VBS脚本转换为shellcode。以下“原生”EXE/DLL指非托管PE文件(包括并不限于C/C++、delphie等编写生成的可执行文件),可以直接由系统加载运行,区别于.Net生成的托管文件。被处理exe/dll为32位程序,则需要用32为的shellcode加载器启用,exe/dll为64位的就用64位shellcode加载器启用。

李小咖·网安技术库 2796

GDI+编程基础(1)

从GDI+所包含的内容来看,它主要由以下几方面构成:二维几何图形的处理     矢量图形由图元(如直线、曲线和轮廓等)组成,图元由坐标中的一组点来制定。GDI+的Rectangele类用于存储一个矩形的位置和尺寸;Pen类存储了线条颜色、线宽和线条风格的信息;Graphics类拥有用于绘制直线、矩形及其他图形的方法;还有几个Brush类存储了怎么用颜色来填充闭合图形和路径。 显示图

evil_csharp的专栏 552

DAMMFND: Domain-Aware Multimodal Multi-view Fake News Detection

虚假新闻的泛滥不仅严重阻碍了互联网社交媒体的健康发展,还在政治、经济和社会层面造成了实际危害,凸显了自动化虚假新闻检测的重要性(Zhou 等,2015;Cui 等,2019;Zhu 等,2022a;Li 等,2024c,b,a)。现有的虚假新闻检测方法通常聚焦于特定领域的新闻,例如健康或政治领域。然而,在现实世界中,社交媒体上的新闻往往跨越多个领域,这就要求现有的虚假新闻检测方法必须考虑多域泛化(Nan 等,2021;Qi 等,2019;Zhu 等,2022b)。

qq_52053775的博客 337

axis1 c# 接口 调用_C#图形编程GDI+基础

公众号:thinger_net加关注 编写图形程序时需要使用GDI(Graphics Device Interface,图形设备接口),从程序设计的角度看,GDI包括两部分:一部分是GDI对象,另一部分是GDI函数。GDI对象定义了GDI函数使用的工具和环境变量,而GDI函数使用GDI对象绘制各种图形,在C#中,进行图形程序编写时用到的是GDI+(Graphics ...

weixin_39689687的博客 256

【AUTOSAR-RTE】-1-聊一聊RTE(Run-Time Environment)

RTE(Run-Time Environment)是AUTOSAR ECU架构的核心。

「汽车电子助手」的博客 6502

手把手教你学Simulink——基于Simulink的无感FOC(滑模观测器+PLL)实战

本文详细介绍了基于Simulink的无感FOC(滑模观测器+PLL)实现方法。主要内容包括:1)SMO+PLL原理精讲,阐述滑模观测器核心思想和PLL的作用;2)系统架构全景图展示;3)Simulink建模全流程,从基础FOC框架到SMO和PLL模块的实现;4)关键参数整定指南和工程实践要点;5)仿真结果分析及常见问题解决方案。该方法可有效替代机械传感器,降低成本并提高可靠性,适用于空调压缩机、电动汽车水泵等工业场景。文章还提供了详细的调试建议和动手实践指导。

MHD0815的博客 83

windows编程学习——GDI学习基础篇(1)

GDI学习旅途基础篇之一 VOID GdiProc(HDC hdc) { HPEN hpen,hpenOld; HBRUSH hbrush,hbrushOld; BYTE bRed = 0; BYTE bGreen = 0; BYTE bBlue = 0; //设置画笔颜色 COLORREF cPen = RGB(bRed,bGreen,bBlue); //设置画刷颜色 COLORREF cBr...

Cry_Alone的博客 762

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Winform编程基础篇(1) WinForm代码结构

本文为转载文章,原文标题为C# Winform编程(1)基础篇,作者为songyulong,原文链接为https://songyulong.blog.youkuaiyun.com/article/details/133361675。本文仅为分享和传播信息的目的,如有侵权,请联系原作者进行删除。

keloi的博客 1323

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Windows编程日志7——GDI编程基础

Windows GDI编程基础摘要 GDI(Graphics Device Interface)是Windows的传统绘图系统,提供设备无关的2D绘图功能。核心概念包括: HDC(设备上下文):代表绘图目标,如屏幕、打印机或内存位图 GDI对象:包括HPEN(画笔)、HBRUSH(画刷)、HBITMAP(位图)和HFONT(字体) 绘制流程:在WM_PAINT消息中通过BeginPaint/EndPaint获取和释放HDC GDI优势在于设备兼容性好、简单业务实现方便,但存在性能局限,现代应用推荐使用Dir

charlie114514191的博客 1624

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

GDI+编程小结

GDI+(Graphics Device Interface Plus图形设备接口加)是Windows XP和Windows Server 2003操作系统的子系统,也是.NET框架的重要组成部分,负责在屏幕和打印机上绘制图形图像和显示信息。 GDI+不但在功能上比GDI 要强大很多,而且在代码编写方面也更简单,因此会很快成为Windows图形图像程序开发的首选。 一、...

积累点滴,保持自我 5873

C#图形编程GDI+基础

    很长一段时间没有更新技术博客了,最近在用C#开发Kinect的程序。所以跟大家分享一下自己一些方面学习和认知。       编写图形程序时需要使用GDI(Graphics Device Interface,图形设备接口),从程序设计的角度看,GDI包括两部分:一部分是GDI对象,另一部分是GDI函数。GDI对象定义了GDI函数使用的工具和环境变量,而GDI函数使用GDI对象绘制各种...

JavaFresh 1043
上一篇: C++文件操作
下一篇: GDI+基础编程(2)——画刷的使用
疯狂-的-蜗牛
博客等级 码龄16年 427粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值