GDI+学习及代码总结之-----画笔

WIN32 GDI+ 学习笔记(二):使用画笔 首先把win32程序的模板贴上来: #include #include using namespace Gdiplus; VOID OnPaint(HDC hdc) { //绘图代码 } LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); INT WINAPI WinMain(HINSTANCE hInstance, HIN 阅读详情

一、构造函数

画笔有两个构造函数,分别看下:

[cpp]  view plain copy
  1. Pen( const Color& color, REAL width);  
  2.   
  3. Pen( const Brush* brush, REAL width);  

注意:第一个构造函数:从一个颜色构造一个单色画笔,平时用的比较多

            第二个构造函数要特别注意,它可以从一个画刷构造一个画笔,当画刷是纯色时,构造的也是纯色画笔,这与第一个构造函数效果相同,但画刷并不一定都是纯色的,如果是纹理画刷的话,构造出来的画笔会是什么样呢,我们看看

例子:(同样用力宏哥哥的照片)

[cpp]  view plain copy
  1. Image image(L"img.bmp");  
  2. TextureBrush tBrush(&image);  
  3. Pen pen(&tBrush,40);  
  4. //在三个不同区域画椭圆,看实现效果  
  5. //试探在同一张图中画椭圆会怎样  
  6. graphics.DrawEllipse(&pen,100,20,200,100);  
  7. graphics.DrawEllipse(&pen,20,150,200,100);  
  8. //试探超出会怎样  
  9. graphics.DrawEllipse(&pen,400,20,200,100);//水平超出  
  10. graphics.DrawEllipse(&pen,20,450,200,100);//垂直超出  

王力宏的照片:程序运行效果:

从运行结果上可以看出,背景图会在绘制区域横向和纵向平铺,然后根据画笔的位置,将其显示!

二、设置画笔样式-----Pen::SetDashStyle(dashStyle) 

DashStyle定义了下面几种线型:

[cpp]  view plain copy
  1. enum DashStyle{  
  2.   DashStyleSolid = 0,   //实线  
  3.   DashStyleDash = 1,  //虚线  
  4.   DashStyleDot = 2, //点线  
  5.   DashStyleDashDot = 3, //点划线  
  6.   DashStyleDashDotDot = 4, //双点划线  
  7.   DashStyleCustom = 5 //自定义线型  
  8. };  

示例:

[cpp]  view plain copy
  1. Pen pen(Color(255, 0, 0, 255), 15);  
  2.   
  3. pen.SetDashStyle(DashStyleDash);//虚线  
  4. graphics.DrawLine(&pen, 0, 50, 400, 150);  
  5.   
  6. pen.SetDashStyle(DashStyleDot);//点线  
  7. graphics.DrawLine(&pen, 0, 80, 400, 180);   
  8.   
  9. pen.SetDashStyle(DashStyleDashDot);//点划线  
  10. graphics.DrawLine(&pen, 0, 110, 400, 210);   

三、自定义画笔样式-----Pen::SetDashPattern(dashArray, count)

Pen类的成员函数SetDashPattern(设置线型风格)可以使用一个预定义的数组来描述画笔的虚实,这个数组的格式为:

[画线部分长度,间隔部分长度,画线部分长度,间隔部分长度……]

数组的大小由开发者自定义,画笔会按照自定义的格式循环画线

例子:

[cpp]  view plain copy
  1. //定义线型数组  
  2. REAL dashVals[4] = {  
  3.     5.0f,   //线长5个像素  
  4.     2.0f,   //间隔2个像素  
  5.     15.0f,  //线长15个像素  
  6.     4.0f};  //间隔4个像素  
  7.   
  8.     Pen pen(Color(255, 0, 0, 0), 5);  
  9.     //设置线型  
  10.     pen.SetDashPattern(dashVals, 4);  
  11.     graphics.DrawLine(&pen, 5, 20, 405, 200);   

四、设置画笔对齐方式-----Pen::SetAlignment(penAlignment)

penAlignment枚举了两种对齐方式:

[cpp]  view plain copy
  1. enum PenAlignment{  
  2.   PenAlignmentCenter = 0,//居中对齐,默认  
  3.   PenAlignmentInset  = 1,//嵌入方式  
  4. };  

例子:

[cpp]  view plain copy
  1. Pen greenPen(Color(255, 0, 255, 0), 15);  
  2. Pen BorderPen(Color(100,0,0,0),1);//透明度设为100  
  3.   
  4. // 设置成嵌入式  
  5. greenPen.SetAlignment(PenAlignmentInset);  
  6. graphics.DrawEllipse(&greenPen, 10,20, 100, 200);  
  7. graphics.DrawRectangle(&BorderPen,10,20,100,200);  
  8. //设置成居中  
  9. greenPen.SetAlignment(PenAlignmentCenter );  
  10. graphics.DrawEllipse(&greenPen, 130, 20, 100, 200);  
  11. graphics.DrawRectangle(&BorderPen,130,20,100,200);  

五、画笔的缩放与旋转(待完)

注意,这是对画笔的缩放与旋转,在画笔缩放或旋转后,用这个画笔画的图像都是缩放/旋转的,这里并不是对图像缩放/旋转,这点一定要清楚。

缩放

几个缩放函数:

[cpp]  view plain copy
  1. Pen::ScaleTransform(sx, sy, order)//方法一,sx指定水平缩放倍数,sy指定纵向缩放倍数  
  2.   
  3. Pen::SetTransform(matrix)//方法二,  
  4.   
  5. Pen::MultiplyTransform(matrix, order)//方法三,  
  6.   
  7. Pen::ResetTransform() //重置缩放参数,即把缩放参数全部去掉,还原到原来的1:1状态  

后面两个函数还不会用,方法一比较简单,举个例子吧:

[cpp]  view plain copy
  1. //缩放一-----ScaleTransform  
  2. //放大之前画个图,放大之后再画个图,对比一下  
  3. Pen pen(Color(255, 0, 0, 255), 2);  
  4. graphics.DrawRectangle(&pen, 50, 50, 150, 100);  
  5.   
  6. // 水平放大8倍,垂直放大4倍  
  7. pen.ScaleTransform(8, 4);  
  8. graphics.DrawRectangle(&pen, 250, 50, 150, 100);  

关于重置Pen::ResetTransform(),贴段代码吧

[cpp]  view plain copy
  1. Pen pen(Color(255, 0, 0, 255), 2);  
  2. // 水平放大8倍,垂直放大4倍  
  3. pen.ScaleTransform(8, 4);  
  4. graphics.DrawRectangle(&pen, 250, 50, 150, 100);  
  5.   
  6. pen.ResetTransform();  
  7. graphics.DrawRectangle(&pen, 450, 50, 150, 100);  

旋转

旋转函数:
[cpp]  view plain copy
  1. Pen::RotateTransform(angle, order)//第一个参数表示旋转度数,第二个参数表示往左旋转还是往右旋转  

例子:

[cpp]  view plain copy
  1. //画笔要旋转,粗细要大于1,否则应用旋转函数不会成功  
  2. Pen pen(Color::Green,5);  
  3. pen.ScaleTransform(1,6);  
  4. graphics.DrawEllipse(&pen,20,20,100,100);  
  5.   
  6. //往右旋转60度  
  7. pen.RotateTransform(60,MatrixOrderAppend );  
  8. graphics.DrawEllipse(&pen,150,20,100,100);  
  9.   
  10. //再往右旋转60度,也就是相对于原来的旋转了120度  
  11. pen.RotateTransform(60,MatrixOrderAppend );  
  12. graphics.DrawEllipse(&pen,300,20,100,100);  
  13. //注意:RotateTransform按说设置成MatrixOrderPrepend会往左旋转,但我设置成它之后,总是不成功的,不知为什么  

六、设置系统线帽

“线帽”,顾名思义,就是线条首尾的外观,默认情况下,使用画笔绘制的直线,其起点和结束点的外观都是相同的——方形。在程序设计中,我们可以对这两个端点的外观进行修改。对于起点,可以使用SetStartCap,对于终点,可以使用SetEndCap来完成。

看这两个函数:

[cpp]  view plain copy
  1. Pen::SetStartCap(startCap)//设置起点线帽  
  2.   
  3. Pen::SetEndCap(endCap)//设置终点线帽  

线帽是由LineCap枚举列出的。LineCap定义如下:

[cpp]  view plain copy
  1. enum LineCap{  
  2.   LineCapFlat     = 0,  
  3.   LineCapSquare   = 1,  
  4.   LineCapRound    = 2,  
  5.   LineCapTriangle = 3,  
  6.   LineCapNoAnchor = 0x10,  
  7.   LineCapSquareAnchor  = 0x11,  
  8.   LineCapRoundAnchor   = 0x12,  
  9.   LineCapDiamondAnchor = 0x13,  
  10.   LineCapArrowAnchor   = 0x14,  
  11.   LineCapCustom        = 0xff  
  12. };  
对于它们各是什么线帽,看例子:(对于每一种线帽都一一把它画了出来,并在其后标上该线帽的名字,大家可以比对一下)

[cpp]  view plain copy
  1. Pen pen(Color::Green,15);  
  2. SolidBrush brush(Color(255,255,0,0));  
  3. FontFamily fontfamily(L"黑体");  
  4. Font font(&fontfamily,16,FontStyleRegular,UnitPixel);  
  5.   
  6. pen.SetStartCap(LineCapFlat);  
  7. pen.SetEndCap(LineCapFlat);  
  8. graphics.DrawLine(&pen,PointF(30,20),PointF(400,20));  
  9. graphics.DrawString(L"LineCapFlat",-1,&font,PointF(430,10),&brush);  
  10.   
  11. pen.SetStartCap(LineCapSquare);  
  12. pen.SetEndCap(LineCapSquare);  
  13. graphics.DrawLine(&pen,PointF(30,50),PointF(400,50));  
  14. graphics.DrawString(L"LineCapSquare",-1,&font,PointF(430,40),&brush);  
  15.   
  16. pen.SetStartCap(LineCapRound);  
  17. pen.SetEndCap(LineCapRound);  
  18. graphics.DrawLine(&pen,PointF(30,80),PointF(400,80));  
  19. graphics.DrawString(L"LineCapRound",-1,&font,PointF(430,70),&brush);  
  20.   
  21. pen.SetStartCap(LineCapTriangle);  
  22. pen.SetEndCap(LineCapTriangle);  
  23. graphics.DrawLine(&pen,PointF(30,110),PointF(400,110));  
  24. graphics.DrawString(L"LineCapTriangle",-1,&font,PointF(430,100),&brush);  
  25.   
  26. pen.SetStartCap(LineCapNoAnchor);  
  27. pen.SetEndCap(LineCapNoAnchor);  
  28. graphics.DrawLine(&pen,PointF(30,140),PointF(400,140));  
  29. graphics.DrawString(L"LineCapNoAnchor",-1,&font,PointF(430,130),&brush);  
  30.   
  31. pen.SetStartCap(LineCapSquareAnchor);  
  32. pen.SetEndCap(LineCapSquareAnchor);  
  33. graphics.DrawLine(&pen,PointF(30,170),PointF(400,170));  
  34. graphics.DrawString(L"LineCapSquareAnchor",-1,&font,PointF(430,160),&brush);  
  35.   
  36. pen.SetStartCap(LineCapRoundAnchor);  
  37. pen.SetEndCap(LineCapRoundAnchor);  
  38. graphics.DrawLine(&pen,PointF(30,200),PointF(400,200));  
  39. graphics.DrawString(L"LineCapRoundAnchor",-1,&font,PointF(430,190),&brush);  
  40.   
  41. pen.SetStartCap(LineCapDiamondAnchor);  
  42. pen.SetEndCap(LineCapDiamondAnchor);  
  43. graphics.DrawLine(&pen,PointF(30,230),PointF(400,230));  
  44. graphics.DrawString(L"LineCapDiamondAnchor",-1,&font,PointF(430,220),&brush);  
  45.   
  46. pen.SetStartCap(LineCapArrowAnchor);  
  47. pen.SetEndCap(LineCapArrowAnchor);  
  48. graphics.DrawLine(&pen,PointF(30,260),PointF(400,260));  
  49. graphics.DrawString(L"LineCapArrowAnchor",-1,&font,PointF(430,250),&brush);  
  50.   
  51. pen.SetStartCap(LineCapCustom);  
  52. pen.SetEndCap(LineCapCustom);  
  53. graphics.DrawLine(&pen,PointF(30,290),PointF(400,290));  
  54. graphics.DrawString(L"LineCapCustom",-1,&font,PointF(430,280),&brush);  


七、自定义线帽

GDI+使用CustomLineCap类来自定义线帽,该类的构造函数为:

[cpp]  view plain copy
  1. CustomLineCap( const GraphicsPath* fillPath, const GraphicsPath* strokePath, LineCap baseCap, REAL baseInset);  
在上述的构造函数中,我们可以从一个路径创建自定义的线帽。使用SetCustomStartCap和SetCustomEndCap将由CustomLineCap函数创建的自定义的线帽与画笔相关联。
示例:

[cpp]  view plain copy
  1. //自定义线帽  
  2. GraphicsPath StartPath,EndPath;  
  3. //构造开始点线帽路径:矩形  
  4. StartPath.AddRectangle(Rect(-10,-5,20,10));  
  5. //构造结束点线帽路径:箭头  
  6. EndPath.AddLine(0,-20,10,0);  
  7. EndPath.AddLine(0,-20,-10,0);  
  8. EndPath.AddLine(0,-10,10,0);  
  9. EndPath.AddLine(0,-10,-10,0);  
  10.   
  11. Pen pen(Color(255,0,0,255),2);  
  12.   
  13. CustomLineCap startCap(NULL,&StartPath);  
  14. CustomLineCap endCap(NULL,&EndPath);  
  15. //将线帽与画笔相关联  
  16. pen.SetCustomStartCap(&startCap);  
  17. pen.SetCustomEndCap(&endCap);  
  18.   
  19. //先画条试验线  
  20. graphics.DrawLine(&pen,20,30,300,30);//水平的  
  21. graphics.DrawLine(&pen,100,50,80,200);//斜的  

八、设置直线连接点属性(设置转角)

直线连接点是两条端点重合或重叠的直线形成的公共区域。GDI+提供了四种直线连接方式:斜接(LineJoinMiter)、斜切(LineJoinBevel)、圆形(LineJoinRound)、剪裁斜接(LineJoinMiterClipped)。

LineJoin枚举了常见的连接方式,其定义是:

[cpp]  view plain copy
  1. enum LineJoin{  
  2.   LineJoinMiter = 0, //斜接  
  3.   LineJoinBevel = 1, //斜切  
  4.   LineJoinRound = 2,  //圆形  
  5.   LineJoinMiterClipped =3  //剪裁  
  6. };  
看一下连接点示例吧:(先看距形中的应用,再看再条直线连接时的转角)

[cpp]  view plain copy
  1. //为了强化效果,特地把直线设的特别粗   
  2. Pen pen(Color::Green,25);  
  3. FontFamily fontfamily(L"宋体");  
  4. Font font(&fontfamily,18,FontStyleRegular,UnitPixel);  
  5. SolidBrush brush(Color(255,255,0,0));  
  6. //先看看矩形的边效果  
  7. pen.SetLineJoin(LineJoinMiter);//设定为斜接  
  8. graphics.DrawRectangle(&pen,20,20,150,100);  
  9.   
  10. pen.SetLineJoin(LineJoinBevel);//设定为斜切  
  11. graphics.DrawRectangle(&pen,220,20,150,100);  
  12.   
  13. pen.SetLineJoin(LineJoinRound );//设定连接方式为圆形  
  14. graphics.DrawRectangle(&pen,420,20,150,100);  
  15.   
  16. pen.SetLineJoin(LineJoinMiterClipped);//设定为剪裁斜接  
  17. graphics.DrawRectangle(&pen,620,20,150,100);  
  18.   
  19. //再看直线的连接效果  
  20. PointF points[]={PointF(20,220),PointF(100,200),PointF(50,280)};  
  21. graphics.SetSmoothingMode(SmoothingModeHighQuality);//设定连接时的平滑度  
  22.   
  23. pen.SetLineJoin(LineJoinMiter);//设定为斜接  
  24. graphics.DrawLines(&pen,points,3);  
  25.   
  26. points[0].X+=100;points[1].X+=100;points[2].X+=100;  
  27. pen.SetLineJoin(LineJoinBevel);//设定为斜切  
  28. graphics.DrawLines(&pen,points,3);  
  29.   
  30. points[0].X+=100;points[1].X+=100;points[2].X+=100;  
  31. pen.SetLineJoin(LineJoinRound );//设定连接方式为圆形  
  32. graphics.DrawLines(&pen,points,3);  
  33.   
  34. points[0].X+=100;points[1].X+=100;points[2].X+=100;  
  35. pen.SetLineJoin(LineJoinMiterClipped);//设定为剪裁斜接  
  36. graphics.DrawLines(&pen,points,3);  
运行结果:


画笔的斜连接限制(交集长度限制)---SetMiterLimit

当两条直线以一定的角度相交时,其形成的交集如图所示:


在实际绘制中,Miter后的灰色部分是不会绘制的,也就是说,会少个角,为什么会这样呢,考虑一种情况,当两条直线之间的夹角较小或者更极端一点,以近乎平行的方式相交,使用LineJoinMiter方式绘制这两条的交集时,其结果则令人难以想像,因为细窄的交集快成了一条直线,接近无限的延伸下去,为了解决这个问题,当两条直线直交时,我们就需要对它们的交集的长度进行裁剪,超出部分将不会被绘制,而这个交集的长度就是由画笔的斜连接限制来确定的。

画笔的斜连接限制是指斜连接长度与画笔宽度之间所允许的最大比值。默认值是10。大家可以通过SetMiterLimit函数来设置画笔的斜连接限制值。

示例1(采取默认值):

[cpp]  view plain copy
  1. PointF points[]={PointF(20,220),PointF(500,220),PointF(30,280)};  
  2. pen.SetLineJoin(LineJoinMiter);//设定为斜接  
  3. graphics.DrawLines(&pen,points,3);  

示例二(设定斜连接限制为2)

[cpp]  view plain copy
  1. PointF points[]={PointF(20,220),PointF(500,220),PointF(30,280)};  
  2. pen.SetLineJoin(LineJoinMiter);//设定为斜接  
  3. pen.SetMiterLimit(2.0f);  
  4. graphics.DrawLines(&pen,points,3);  
【Win32绘图编程,GDI绘图对象】绘图基础,位图处理,绘图消息处理,画笔,画刷,文本绘制 这一篇文章分享本人学习win32绘图编程,其中包括GDI绘图对象,绘图基础,基本图形的绘制,画笔画刷的使用,文本绘制,以及文本字体的更改。 阅读详情

相关推荐

掌握GDI+:使用画笔和画刷进行绘图

本章讲述了如何在.NET Framework类库中使用GDI+来操作画笔和画刷。从介绍GDI+中不同类型的画刷开始,详细学习了各画刷类及其属性和方法的使用。接着,转向画笔的学习,包括如何使用GDI+类来表示画笔以及如何为其添加样式。本章还探讨了系统画笔和画刷的使用,并将画笔和画刷的选项添加到了GDI+Painter应用程序中。

weixin_36123300的博客 453

Delphi编写的GDI+界面类

使用Delphi2010开发的一个GDI+界面类,可以做出非常漂亮的界面。unit xDUISkinPanel; interface uses   Windows, Messages, SysUtils, Graphics, Classes, stdctrls, Buttons, GDIPlusUse, GdiPlus,   GdiPlusHelpers, Controls, ExtCtr...

weixin_34077371的博客 464

探索GDI+的填充样式与纹理画笔

本文详细探讨了.NET环境中GDI+图形绘制技术,特别是填充样式的应用和纹理画笔的使用。通过阅读提供的章节内容,我们了解到不同的填充样式(如HatchStyle)和纹理画笔(TextureBrush)如何在图形界面中被创建和使用,以及如何通过编程实现复杂图形的绘制和填充。

weixin_42576186的博客 303

再学 GDI+[27]: TGPPen - 画笔样式 - SetDashStyle

本例效果图: 代码文件: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) ...

weixin_34318956的博客 133

西门子S7-1200与汇川SV660P伺服速度模式实战:从接线到编程全流程

本文详细解析了西门子S7-1200 PLC与汇川SV660P伺服驱动器在速度模式下的集成实战。内容涵盖从硬件接线、伺服参数关键设置(如电子齿轮比)、博图软件组态到PLC编程的全流程,并提供了故障排查与性能优化指南,帮助工程师快速实现精准、稳定的运动控制。

weixin_29248313的博客 484

GoPro官方API实战:从蓝牙配对到Wi-Fi流媒体,构建跨平台控制应用

本文详细解析了GoPro官方API的开发实践,涵盖蓝牙配对、Wi-Fi流媒体控制等关键技术。通过实战案例,指导开发者如何构建跨平台控制应用,解决设备发现、指令解析、视频流传输等核心问题,并分享Android平台迁移经验与常见问题排查方法。

weixin_30727835的博客 397

Delphi以GDI+制作桌面歌词效果

新建一个应用程序,在窗体上放置一个TTimer和一个TPopupMenu,TTimer的Interval属性为1500,TPopupMenu建立三个子菜单项,分别为“总在最前”、“背景穿透”和“退出”。再准备一张背景图片。工程源代码如下: unit Unit1; interface uses Windows, Messages, SysUtils, Variants,...

weixin_30881367的博客 154

C# 开发 WPS 插件实战:从环境搭建到功能实现(附完整代码)

本文提供了一份详尽的C#开发WPS插件实战指南,涵盖从环境搭建到功能实现的完整流程。通过COM技术,开发者可以创建自定义插件,为WPS Office扩展自动化功能,如文档处理与格式转换。文章包含核心概念解析、Ribbon界面集成、调试部署方法及完整代码示例,帮助开发者快速上手。

rust6ferris的博客 927

Delphi 7下IGDIPlus库的使用

IGDI+是一个免费开源封装微软GDI+功能的Delphi库,该库使得可以用Delphi语言代码快速简短的实现复杂GDI+应用程序。

无幻 1万+

ROS水下仿真神器uuv_simulator:从零搭建水下机器人测试环境(附Gazebo配置全流程)

本文详细介绍了如何使用ROS和uuv_simulator从零搭建水下机器人仿真测试环境,包括Gazebo配置全流程。通过系统环境准备、水下世界构建、机器人模型定制开发等步骤,帮助开发者在虚拟海洋环境中高效验证算法,大幅降低研发成本。特别适合水下机器人研发人员参考。

ujm5678901的博客 262

告别信号毛刺!手把手教你用ADS和IBIS-AMI模型搞定PCIe Gen3眼图仿真

本文详细介绍了如何使用Keysight ADS和IBIS-AMI模型进行PCIe Gen3眼图仿真,解决高速信号传输中的信号质量问题。从仿真环境搭建、S参数预处理到眼图优化与故障排除,提供了一套完整的工程实践指南,帮助工程师提升PCIe Gen3接口的信号完整性。

weixin_28366053的博客 366

手把手教你学Simulink——基于Simulink的模糊自适应PI调节FOC电流环

本文提出基于模糊自适应PI控制的FOC电流环优化方案,针对传统PI控制参数固化、抗扰性差等问题,通过模糊逻辑在线调整PI参数。方案采用双输入(电流误差及变化率)和三输出(ΔKp/ΔKi/PI调节)结构,实现动态响应时间<30μs(提升38%)、超调<5%(降低71%)、参数摄动下误差<±0.4A(精度提升73%)。详细介绍了Simulink建模步骤,包括模糊规则设计(7语言变量、49条规则)、隶属度函数配置及自适应PI实现逻辑,并提供实机部署建议。仿真结果表明,该方法显著提升系统鲁棒性,特

MHD0815的博客 79

C GDI+ 完整例子资源文件

C# GDI+ 完整例子资源文件 【下载地址】CGDI完整例子资源文件 探索C# GDI+的无限可能,本资源提供了一个超完整的示例,几乎涵盖了GDI+的所有功能。无论您是初学者还是希望深入了解GDI+高级特性的专业人士,这里都有您所需。从画笔用法到图形学算法,从特效处理到渐变显示,再到坐标变换和旋转文字,甚至是箭头绘制,...

gitblog_06729的博客 288

【数据集介绍】MVTec 3D AD数据集介绍

MVTec AD(MVTec Anomaly Detection)数据集是用于异常检测的计算机视觉数据集。该数据集包含来自工业生产中不同材料和产品的图像,包括玻璃、塑料、纺织品等。每个类别都包含正常样本和异常样本。这些异常样本包括各种常见的生产缺陷,如划痕、裂纹、凹陷等。MVTec AD数据集旨在帮助研究人员和从业者开发和评估用于检测工业制造中物体缺陷的算法和系统。

原来也有北瓜 7750

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

第5章,[Win32 章节] :贝塞尔样条曲线(一)

Windows 程序设计

2401_82825368的博客 218

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

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

CSharp代码示例每日一讲: 在GDI+中使用画笔和画刷

CSharp代码示例每日一讲,为刚刚学习编程的人准备,利用最简单的代码介绍CSharp编程知识!画笔和画刷是图形应用中最常用的两种对象。笔用于绘制图形对象的轮廓,如线条和曲线;刷子是用来填充图形对象的内部区域(例如,填充矩形或椭圆形)。在本文中,我们将讨论如何创建和使用各种类型的画刷和画笔。我们首先讨论画刷、画笔的类型,它们的方法和属性,以及如何在GDI+中创建和使用它们。GDI+提供Pen和Pe...

家园 2238

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

WINCC7.3破解文件

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

学习GDI+绘图

项目至今已经初步完成基本功能,这几天抽空把运用到的知识点总结一下,温故而知新。当前项目中最重要的功能模块是几何参数功能模块,大量运用到绘图的技术。要实现的功能是将读取到的几何参数以曲线的形式在页面中画出波形图。 目录 目录 一、GDI+绘图基础 二、GDI+概述 三、Graphics类 3.1创建Graphics对象 3.2 Graphics类的方法成员 3.3 常用画图对象 3.3...

u014677855的博客 2万+

【学习笔记】Windows GDI绘图(八)画笔Pen与画刷Brush

详细示例Pen与Brush的属性与方法

图南堂 1562

46_不得不说GDI真的很抽象

关于GDI,再学习四个概念,扩展画笔,区域,路径,绘图模式。基本上就算入门GDI了。幸运的是,这些内容没有前面说的这么抽象了。

成长需要沉淀。 1437

C# GDI+绘图(一)GDI+介绍及基础

最近,项目中,有一块比较发杂的网格,并在网格上绘有各种颜色和文本,在Dev库中并为找到能实现这种功能的现有或可以二次开发的控件,因此,涉及到GDI+绘图这块陌生的领域。下面即时我在本次学习过程中的笔记,本次内容一共分为4篇,分别都有各自的代码或工程文件提供,有需要的朋友可以下载。 C# GDI+绘图(一) GDI+介绍及基础 C# GDI+绘图(二)进阶---Pen/Brush以及坐标轴平移和...

画鸡蛋的不止达芬奇 1万+

win32GDI(Num27)

真实的图像在计算机存储时,将图像细分为很小的单元格,通过记录每个单元格的颜色来记录图像信息图像细分后的单元格被称为像素,单元格的颜色是每个像素的颜色值,被称为像素值GDI只支持位图(.bmp)格式。

weixin_41576682的博客 954

GDI的一些很方便的代码

自己有点孤陋寡闻!!!!!!!!!!!! 改变画笔颜色和画刷颜色很方便 ms-help://MS.MSDNQTR.v90.en/gdi/devcons_34qa.htm Setting the Pen or Brush Color The following example shows how an application can change the DC pen col

cay22的专栏 1239
上一篇: GDI+画笔的使用
下一篇: GDI+学习及代码总结之------文本与字体
htt9931
博客等级 码龄24年 43粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值