Visual C++.NET GDI+编程基础

GDIPlus++:C++中的GDI+图形开发包 GDI+(Graphics Device Interface Plus)是微软提供的一套用于二维图形、图像处理的编程接口。相比旧版的GDI,GDI+支持更丰富的图形操作和图像处理功能,它包括了绘制线条、图形、图像处理、文本输出以及颜色管理等。GDI+提供的不仅仅是简单的绘图对象,例如Pen和Brush,还包括了一系列用于复杂图形的高级对象。这些对象可以用来构建自定义形状和模式,例如或。使用这些对象可以实现各种图形效果,如渐变色填充或图案填充等。使用。 阅读详情

        GDI+提供从简单到复杂图形绘制的大量方法,并且我们可以通过对路径和区域的操作构造出更复杂的图形,这在CAD等场合极为有用。当然,在绘图之前我们有必要搞清一些基本内容,如坐标空间、画笔和画刷等。

  坐标空间及其变换

  在视图和窗口中绘图或定位总是在一个二维坐标系进行,依据作用方法的不同,坐标有多种表示方法,并且各种不同坐标之间可以相互转换。

  1. 世界坐标系、设备坐标系和页面坐标系

  GDI+为我们提供了三种坐标空间:世界坐标系、页面坐标系和设备坐标系。

  世界坐标系是应用程序用来进行图形输入输出所使用的一种与设备无关的笛卡尔坐标系。通常,我们可以根据自己的需要和方便定义一个自己的世界坐标系,这个坐标系称为用户坐标系。例如,前面DrawLine(&newPen, 20, 10, 200, 100);中的坐标都是以这个用户坐标系为基准的,默认时使用像素为单位。

  设备坐标系是指显示设备或打印设备坐标系下的坐标,它的特点是以设备上的象素点为单位。对于窗口中的视图而言,设备坐标的原点在客户区的左上角,x坐标从左向右递增,y坐标自上而下递增。由于设备的分辨率不同,相同坐标值的物理位置可能不同。如对于边长为100的正方形,当显示器为640 x 480和800 x 600时的大小是不一样的。

  页面坐标系是指某种映射模式下的一种坐标系。所谓映射是指将世界坐标系通过某种方式进行的变换。默认时,设备坐标和页面坐标是一致的。

  2. 坐标映射和坐标原点的设置

  为了能保证打印或显示的结果不受设备的影响,GDI+定义了一些映射方法和属性来决定设备坐标和页面坐标之间的关系。这些映射方法和属性有:

   SetPageUnit和GetPageUnit

  这两个属性函数是用来设置和获取每个单位所对应的实际度量单位。它通常可以有下列的值:

UnitDisplay -- 每个页面单位为1/75英寸;
UnitPixel -- 每个页面单位为1个像素,此时页面坐标与设备坐标相同;
UnitPoint -- 每个页面单位为1/72英寸;
UnitInch -- 每个页面单位为1英寸;
UnitDocument -- 每个页面单位为1/300英寸;
UnitMillimeter-- 每个页面单位为1毫米。

  例如,或将Ex_GDIPlusDlg示例中的绘图代码修改成:

CPaintDC dc(this);
using namespace Gdiplus;
Graphics graphics( dc.m_hDC );
graphics.SetPageUnit(UnitMillimeter);
Pen newPen( Color( 255, 0, 0 ), 3 );
HatchBrush newBrush( HatchStyleCross,
Color(255, 0, 255, 0),
Color(255, 0, 0, 255));
graphics.DrawRectangle( &newPen, 50, 50, 100, 60);
graphics.FillRectangle( &newBrush, 50, 50, 100, 60);

  则笔画宽度为3,以及矩形的左上角顶点坐标和大小单位都为毫米,其结果如图所示。



  SetPageScale和GetPageScale

 GDI+的这两个属性函数分别用来设置和获取页面的缩放比例。例如,当上面的绘图代码变成:

...
graphics.SetPageUnit(UnitMillimeter);
graphics.SetPageScale( (REAL)0.1);
Pen newPen( Color( 255, 0, 0 ), 3 );
...

  代码中,REAL是一个浮点类型的定义。上述代码的结果如图2所示。


图2

  TranslateTransform

  GDI+的TranslateTransform方法用来改变坐标的原点位置,例如TranslateTransform(100, 50)是将坐标原点移到点(100,50)。
画笔

  画笔是用来绘制各种直线和曲线的一种图形工具,GDI+的Pen类为画笔提供了丰富的方法。一般来说,我们可以通过其构造函数来指定画笔的颜色和宽度,其定义如下:

Pen( const Color& color, REAL width );

  其中,color是用来指定画笔颜色,width用来指定画笔宽度。REAL是一个float类型定义,而Color是GDI+的一个颜色类,它既可以指定一个ARGB颜色类型,也可以使用GDI+预定义的颜色值,甚至可以将COLORREF转换成Color类型的颜色。例如,下面的代码都是创建一个宽度为3,颜色为蓝色的画笔:

Pen newPen( Color( 255, 0, 0, 255 ), 3 );

Pen newPen(Color( 0, 0, 255), 3);
// 当Color只有三个实参时,颜色Alpha分量值为255。

Pen newPen(Color::Blue, 3);

COLORREF crRef = RGB( 0, 0, 255);
Color color;
color.SetFromCOLORREF(crRef);
Pen newPen(color, 3);

  除了颜色外,GDI+的Pen类还提供SetDashStyle和SetDashPattern方法来设置画笔的预定义风格和自定义类型。其中,预定义风格可以有:DashStyleSolid(实线)、DashStyleDash(虚线)、DashStyleDot(点线)、 DashStyleDashDot(点划线)、DashStyleDashDotDot(双点划线)和DashStyleCustom(自定义类型)。例如下列代码,其结果如图7.6所示:

using namespace Gdiplus;
Graphics graphics( pDC->m_hDC );
Pen pen(Color(255, 0, 0, 255), 15);

pen.SetDashStyle(DashStyleDash);
graphics.DrawLine(&pen, 0, 50, 400, 150);

pen.SetDashStyle(DashStyleDot);
graphics.DrawLine(&pen, 0, 80, 400, 180);

pen.SetDashStyle(DashStyleDashDot);
graphics.DrawLine(&pen, 0, 110, 400, 210);



  但是,在工程应用中,预定义风格的画笔有时并不能满足实际的需求,而必须自己定义一些线型,这需要通过SetDashPattern函数来实现。SetDashPattern的原型如下:

Status SetDashPattern( const REAL* dashArray, INT count);

  其中,dashArray是一个包含短划和间隔长度的数组,count表示数组的大小。注意,dashArray中的短划长度和间隔长度是成对出现的,例如下列代码是使用自定义类型的画笔,其结果如图7.7所示。

REAL dashVals[4] = {
2, // 短划长为2
2, // 间隔为2
15, // 短划长为15
2}; // 间隔为2
Pen pen(Color(255, 0, 0, 0), 5);
pen.SetDashPattern(dashVals, 4);
graphics.DrawLine(&pen, 5, 20, 405, 200);



  需要说明的是,GDI+的Pen类还提供SetStartCap和SetEndCap方法来设置一条直线的起始端和终止端的样式。例如下面的代码,其结果如图7.8所示。

using namespace Gdiplus;
Graphics graphics( pDC->m_hDC );

Pen pen( Color( 255, 0, 0, 255 ), 15);

pen.SetStartCap(LineCapFlat);
pen.SetEndCap(LineCapSquare);
graphics.DrawLine(&pen, 50, 50, 250, 50);

pen.SetStartCap(LineCapRound );
pen.SetEndCap(LineCapRoundAnchor);
graphics.DrawLine(&pen, 50, 100, 250, 100);

pen.SetStartCap(LineCapDiamondAnchor);
pen.SetEndCap(LineCapArrowAnchor);
graphics.DrawLine(&pen, 50, 150, 250, 150);




 画刷和渐变

  画刷用于指定填充的特性,GDI+为填充色和阴影线画刷提供了SolidBrush和HatchBrush类。通过它们的构造函数直接可以创建一个画刷,其构造函数的原型如下:

SolidBrush( const Color& color);

HatchBrush( HatchStyle hatchStyle, const Color& foreColor,
const Color& backColor);

  其中,foreColor和backColor用来指定阴影线颜色和填充的背景颜色,背景色可以不指定。hatchStyle用来指定阴影线的样式,它可以是这样的一些预定义样式:HatchStyleHorizontal (水平线)、HatchStyleVertical(垂直线)、HatchStyleForwardDiagonal(上斜线)、 HatchStyleBackwardDiagonal(下斜线)、HatchStyleCross(十字线)以及 HatchStyleDiagonalCross (交叉线)等。当然,还有许多样式如HatchStyle30Percent(30%填充)、HatchStyleSolidDiamond (实心菱形)等,这里不一一列举。

  由于在前面的示例中,对这种简单的画刷的使用已介绍过,因而这里着重讨论渐变画刷的创建和使用。
GDI+提供了LinearGradientBrush和PathGradientBrush类分别用来创建一个直线渐变和路径渐变画刷。

  直线渐变是指在一个矩形区域使用两种颜色进行过渡(渐变),过渡方向可以是水平、垂直以及对角线方向。LinearGradientBrush构造函数的原型如下:

LinearGradientBrush(Point & point1, Point & point2,
Color & color1, Color & color2);
LinearGradientBrush(Rect & rect, Color & color1, Color & color2,
REAL angle, BOOL isAngleScalable);
LinearGradientBrush(Rect & rect, Color & color1, Color & color2,
LinearGradientMode mode);

  其中,point1和point2分别用来指定矩形区域的左上角和右下角点坐标,color1和color2分别用来指定渐变起始和终止的颜色。 rect用来指定一个矩形区域的大小和位置,angle用来指定渐变的方向角度,正值为顺时针。isAngleScalable是一个即将废除的参数。 mode用来指定渐变的方法,它可以是LinearGradientModeHorizontal(水平方向)、 LinearGradientModeVertical (垂直方向)、LinearGradientModeForwardDiagonal(从左下到右上的对角线方向)和 LinearGradientModeBackwardDiagonal(从左上到右下的对角线方向)。

  需要说明的是,Point和Rect是GDI+新的数据类型,它们和MFC的CPoint和CRect类的功能基本一样,但它们相互之间不能混用。

  路径渐变画刷是用渐变颜色来填充一个封闭的路径。一个路径既可以由一系列的直线和曲线构成,也可以由其它对象来构造。路径渐变是一种中心颜色渐变模式,它从路径的中心点向四周进行颜色渐变。PathGradientBrush构造函数的原型如下:

PathGradientBrush(const GraphicsPath* path);
PathGradientBrush(const Point * points, INT count, WrapMode wrapMode);

  其中,path用来指定一个路径指针,points和count分别用来指定组成路径的一系列直线端点的数组及其大小,wrapMode是一个可选项,用来指定填充的包围模式。一个包围模式用来决定是否在区域内部、在区域外部以及所有区域都填充。默认时,其值为WrapModeClamp,即在区域内部填充。

  下面的代码说明了上述两种渐变画刷的使用方法:

Graphics graphics( pDC->m_hDC );

GraphicsPath path; // 构造一个路径
path.AddEllipse(50, 50, 200, 100);

// 使用路径构造一个画刷
PathGradientBrush pthGrBrush(&path);

// 将路径中心颜色设为蓝色
pthGrBrush.SetCenterColor(Color(255, 0, 0, 255));

// 设置路径周围的颜色为蓝芭,但alpha值为0
Color colors[] = {Color(0, 0, 0, 255)};
INT count = 1;
pthGrBrush.SetSurroundColors(colors, &count);

graphics.FillRectangle(&pthGrBrush, 50, 50, 200, 100);

LinearGradientBrush linGrBrush(
Point(300, 50),
Point(500, 150),
Color(255, 255, 0, 0), // 红色
Color(255, 0, 0, 255)); // 蓝色

graphics.FillRectangle(&linGrBrush, 300, 50, 200, 100);

  结果如图7.9所示。

  需要说明的是,画笔和画刷还可使用一个图片来创建。例如下列代码,其结果如图7.10所示。

Graphics graphics( pDC->m_hDC );

Image image(Limage.jpg);
TextureBrush tBrush(&image);
Pen texturedPen(&tBrush, 10);

graphics.DrawLine(&texturedPen, 25, 25, 325, 25);
tBrush.SetWrapMode(WrapModeTileFlipXY);
graphics.FillRectangle(&tBrush, 25, 100, 300, 200);



图形几何变换

  图形变换一般是对图形的几何信息经过几何变换后产生新的图形。常见二维图形的变换有平移、比例、对称、旋转、错切等。图形几何变换最有效的手段是采用矩阵变换,GDI+就有这样的矩阵类Matrix,它为我们提供了许多变换的方法,如Invert(转置)、Multiply(矩阵相乘)、Rotate (旋转)等。例如下面的代码就是Matrix::Rotate一个例子,其结果如图7.11所示。

Graphics graphics( pDC->m_hDC );
Pen pen(Color(255, 0, 0, 255));

Matrix matrix;
matrix.Translate(40, 0); // 先平移
matrix.Rotate(30, MatrixOrderAppend); // 后旋转

graphics.SetTransform(&matrix);
graphics.DrawEllipse(&pen, 0, 0, 100, 50);

  需要说明的是,代码中的MatrixOrderAppend用来指明第二个矩阵(若有)的操作次序是后置的,即matrix1 OP matrix2,OP表示某种操作;若为MatrixOrderPrepend 则表示matrix2 OP matrix1。而SetTransform则指定一个矩阵对点坐标进行变换,新的坐标点(x*,y*)结果可用下列公式来表示:

[x* y* 1] = [x y 1] = [m11x+m21y+dx m12x+m22y+dy 1]

式中,dx和dy用来指定x和y方向的平移量,若dx = dy = 0,则:

  (1) 当m21 = m12 = 0,m11 = -1,m22 = 1时,有x*= -x,y*= y,产生与y轴对称的反射图形;

  (2) 当m21 = m12 = 0,m11 = 1,m22 = -1时,有x*= x,y*= -y,产生与x轴对称的反射图形;

  (3) 当m21 = m12 = 0,m11 = m22 = -1时,有x*= -x,y*= -y,产生与原点对称的反射图形;

  (4) 当m21 = m12 = 1,m11 = m22 = 0时,有x*= y,y*= x,产生与直线y = x对称的反射图形;

  (5) 当m21 = m12 = -1,m11 = m22 = 0时,有x*= -y,y*= -x,产生与直线y = -x对称的反射图形;

  (6) 而当m11 = m22 = cosq,m21 = -m12 = sinq 时,则进行旋转变换。

  例如下列代码,其结果如图7.12所示。

Graphics graphics( pDC->m_hDC );
Pen pen(Color::Blue,3);
graphics.DrawLine(&pen, 150,50,200,80);

pen.SetColor(Color::Gray);
Matrix matrix( -1,0,0,1, 150,50); // 使用第一种情况

graphics.SetTransform(&matrix);
graphics.DrawLine(&pen, 0,0,50,30);



  其中,Matrix的构造函数有如下定义:

Matrix( REAL m11, REAL m12, REAL m21, REAL m22, REAL dx, REAL dy);

  需要说明的是,除了使用Matrix进行图形变换外,Graphics本身提供相应的变换方法,如RotateTransform(旋转变换)、ScaleTransform(比例变换)和TranslateTransform(平移变换)等。

基本绘图函数

  在前面许多示例中,我们已经用到如DrawLine等基本绘图函数。除此之外,还有许多这样的函数,并且每个绘图函数都有其重载形式,这给我们带来了许多方便。表7.1列出这些基本绘图函数。

  表1 GDI+常用基本绘图函数

绘图函数功能描述
DrawArc绘制一条圆弧曲线,范围由起止角大小决定,大小由矩形或长宽值指定
DrawBezier绘制一条由一系列型值顶点决定的三次Bezier曲线
DrawBeziers绘制一系列的三次Bezier曲线
DrawClosedCurve绘制一条封闭的样条曲线
DrawCurve绘制一条样条曲线
DrawEllipse绘制一条椭圆轮廓线,大小由矩形或长宽值指定
DrawLine绘制一条直线
DrawPath绘制由GraphicsPath定义的路径轮廓线
DrawPie 绘制一条扇形(饼形)轮廓线
DrawPolygon绘制一个多边形的轮廓线
DrawRectangle绘制一个矩形
FillEllipse 填充一个椭圆区域
FillPath 填充一个由路径指定的区域
FillPie 填充一个扇形(饼形)区域
FillPolygon填充一个多边形区域
FillRectangle填充一个矩形区域
FillRectangles用同一个画刷填充一系列矩形区域
FillRegion 填充一个区域(Region)的内部

  下面的代码是通过路径用两条样条曲线构造一个复杂的区域,然后填充它,其结果如图7.13所示。

Graphics graphics( pDC->m_hDC );

Pen pen(Color::Blue, 3);
Point point1( 50, 200);
Point point2(100, 150);
Point point3(160, 180);
Point point4(200, 200);
Point point5(230, 150);
Point point6(220, 50);
Point point7(190, 70);
Point point8(130, 220);

Point curvePoints[8] = {point1, point2, point3, point4,
point5, point6, point7, point8};
Point* pcurvePoints = curvePoints;

GraphicsPath path;
path.AddClosedCurve(curvePoints, 8, 0.5);

PathGradientBrush pthGrBrush(&path);
pthGrBrush.SetCenterColor(Color(255, 0, 0, 255));
Color colors[] = {Color(0, 0, 0, 255)};
INT count = 1;
pthGrBrush.SetSurroundColors(colors, &count);

graphics.DrawClosedCurve(&pen, curvePoints, 8, 0.5);
graphics.FillPath(&pthGrBrush, &path);

Visual C++下的GDI图形编程实践:2014huabipen.rar 本文还有配套的精品资源,点击获取 简介:本项目“2014huabipen.rar”利用GDI(Graphics Device Interface)技术,通过Visual C++开发工具实现了一个图像编程示例。它展示了如何通过创建自定义画笔进行写字、画画和绘制矩形等操作。项目包含多个关键的C++源代码文件,如MyPenView.cpp、MainFrm.cpp、MyPenDoc... 阅读详情

相关推荐

Visual C++.NET 应用编程实战与案例分析150例

本文还有配套的精品资源,点击获取 简介:《Visual C++.NET 应用编程150例》汇集了丰富的编程案例,覆盖了从基础语法到高级技术的各个方面,以帮助开发者深入理解和应用C++.NET语言及其在.NET Framework环境下的功能。内容包括C++类和对象的面向对象编程、.NET基础类库、Windows Forms的界面控件使用和事件驱动编程、MFC库的介绍、图形与...

weixin_35649491的博客 1257

【C++】GDI+图像编程入门(二、图像的光栅特效显示编程)

C++本人也是初学者,很多地方也不是很懂,写博客的原因主要有以下三个原因:1.对于学习的得思路和资料进行整理2.为比我还菜的朋友提供一定得参考3.请优快云高手对我写的代码进行批评和指正。 首先还是建立四个变量m_ImageShow:为COpenImageFileApp类中的一个CImage类型的公共变量m_StrImageFileName:为COpenImageFil

956

c++ GDI+绘图

GDI+绘图,支持缩放,裁剪任意区域,任意角度的旋转和镜像,及各种样式画刷,功能强大

C++使用GDI+进行简单绘图与擦除

C++使用GDI+进行简单绘图与擦除 绘图主要是捕捉鼠标下落与升起事件,文中应用的是Duilib库进行界面编程的,对应的也就是WM_LBUTTONDOWN和WM_LBUTTONUP消息事件,画图的主要实现是开启一个线程,一直循环去捕捉用户的WM_LBUTTONDOWN和WM_LBUTTONUP事件,遇到WM_LBUTTONDOWN事件时,运用GetMousePos()函数或GetCursorPos...

Z18292832663的博客 7094

Visual C++游戏编程基础6

Visual C++游戏编程基础6.........

C++ GDI+ 实现的画板程序

用C++结合GDI+实现了画板的基本功能,可以绘出各种图形,改变画笔颜色,划线的粗细以及填充等功能!适合GDI+和C++学习者学习

C++的GDI+ 处理图集tif TIFF ,动态图片GIF,gif

​ 从多帧图像复制单个帧 下面的示例从多帧 TIFF 文件中检索各个帧。 创建 TIFF 文件后,会将各个帧添加到页面维度 (请参阅创建和保存 Multiple-Frame 映像) 。 此代码显示四个页面中的每一页,并将每个页面保存到一个单独的 PNG 磁盘文件。 此代码从多帧 TIFF 文件构造图像对象。 为了 (页面) 检索各个帧,代码将调用该图像对象的Image:: SelectActiveFrame方法。 传递给Image:: SelectActiveFrame方法的第一个参数是 ...

weixin_45935855的博客 882

【C++】自学GDI&GDI+

5个小时就能学好GDI+,内附源码,以及教学文档和教学视频链接。目前最优秀的教程。

Visual C++.NET GDI+编程基础方案

 GDI+提供从简单到复杂图形绘制的大量方法,并且我们可以通过对路径和区域的操作构造出更复杂的图形,这在CAD等场合极为有用。当然,在绘图之前我们有必要搞清一些基本内容,如坐标空间、画笔和画刷等。  坐标空间及其变换  在视图和窗口中绘图或定位总是在一个二维坐标系进行,依据作用方法的不同,坐标有多种表示方法,并且各种不同坐标之间可以相互转换。  1. 世界坐标系、设备坐标系和页面坐标系  GDI+

answer的专栏 1802

某盾blackBox逆向——纯算

某盾blackBox逆向——纯算

Lzyydsb的博客 5891

超简单的视频换脸,效果相当不错!完全白嫖的技术,来自ComfyUI 官方客户端一键搞定!手把手教会你如何下载安装部署,而且教你如何使用。

如果你电脑上没有安装Visual Studio的C++桌面开发组件,还有Windows应用SDK C++模板,那么你需要自行去下载安装下【安装后默认界面会自动识别系统语言,当然如果你是中文繁体用户,那么你可以在 ComfyUI 的管理器里下载。】并把它放入根目录-models-insightface文件夹内 , 同时下载视频换脸工作流 【分享手把手教你视频换脸,本地部署,轻轻松松当上“电影主角”】,否则insightface无法被正常载入。) 这是换脸必备的工具 ,安装后重启;

TianLeung的博客 2851

基于Visual C++.NET的GDI+开发教程

GDI+接口是Microsoft Whistler操作系统中的一部分,它是GDI的一个新版本,不仅在GDI基础上添加许多新特性而且对原有的GDI功能进行优化。在为开发人员提供的二维矢量图形、文本、图像处理、区域、路径以及图形数据矩阵等方面构造了一系列相关的类,如Bitmap(位图类)、Brush(画刷类)、Color(颜色类)、Font(字体类)、Graphics(图形类)、Image(图像类)、...

weixin_34306593的博客 120

UNITY2022 Cardboard环境搭建

必须安装 Git,并且 git 可执行文件必须位于 PATH 环境变量中。考文档:https://developers.google.cn/cardboard/develop/unity/quickstart?转到 Assets/Samples/Google Cardboard//Hello Cardboard/Scenes/HelloCardboard 场景中。粘贴https://github.com/googlevr/cardboard-xr-plugin.git到文本输入字段中。

weixin_39510925的博客 1210

用Visual C++.NET进行GDI+编程

6、用Visual C++.NET使用GDI+的一般方法   在Visual C++.NET使用GDI+一般遵循下列步骤:   (1) 在应用程序中添加GDI+的包含文件gdiplus.h以及附加的类库gdiplus.lib。通常gdiplus.h包含文件添加在应用程序的stdafx.h文件中,而gdiplus.lib可用两种进行添加:第一种是直接在stdafx.h文件中添加下列语句:

ctl530798540的专栏 502

GPT注册与使用全流程详解:从零到一的实战指南

本文详细介绍了GPT的注册与使用全流程,从认识GPT作为智能对话助手开始,到注册前的设备与环境准备、手把手完成账号注册、首次使用指南以及进阶使用技巧。文章还涵盖了安全使用与注意事项,帮助用户从零开始高效利用GPT提升工作效率和内容创作能力。

weixin_33843409的博客 387

SwinTransformer 改进:SSPCAB模块(2024最新改进方法)

SSPCAB(Spatial Pyramid Pooling with Channel Attention Block)是2024年提出的一种新型神经网络架构改进方法,专注于在保持高精度的同时显著降低计算复杂度和参数量。该方法通过创新的空间金字塔池化与通道注意力机制的结合,实现了网络结构的紧凑化和运算效率的大幅提升。核心创新点1. 混合空间金字塔池化(Hybrid Spatial Pyramid Pooling, HSPP)多尺度动态核池化:根据输入特征图尺寸动态调整池化核大小和步长交叉级联结构。

Henry的博客 1307

visual c++gdi_Visual Basic .NET中的GDI +图形

visual c++gdi GDI+ is the way to draw shapes, fonts, images or generally anything graphic in Visual Basic .NET. GDI +是在Visual Basic .NET中绘制形状,字体,图像或一般任何图形的方法。 This article is the first part of a c...

cumao2792的博客 426

【Power Compiler手册】4.saif文件

功耗计算的准确性取决于切换活动数据的准确性。这些数据是通过使用RTL仿真或门级仿真生成的,并存储在SAIF文件中。在执行功耗优化和分析之前,应该使用SAIF文件来反标设计对象上的切换活动信息。SAIF是由Synopsys支持的ASCII格式,用于促进不同Synopsys工具之间的信息交换(参见IEEE 1801标准,附录J)。使用`read_saif`命令读取SAIF文件,使用`write_saif`命令写出SAIF文件。有关更多信息,请参见`read_saif`和`write_saif`命令的手册页。

QRBQ 2186

GDI+编程基础(一)GDI+ Vs GDI

一、GDI  GDI是位于应用程序与不同硬件之间的中间层,这种结构让程序员从直接处理不同硬件的工作中解放出来,把硬件间的差异交给了GDI处理。GDI通过将应用程序与不同输出设备特性相隔离,使Windows应用程序能够毫无障碍地在Windows支持的任何图形输出设备上运行。例如,我们可以在不改变程序的前提下,让能在Epson点式打印机上工作的程序也能在激光打印机上工作。它把windows系统中的图形

人在旅途/章鸽 的专栏 987

第 13 章:Spring AI Alibaba MCP 与 Nacos3 — 企业级MCP服务

理解Spring AI Alibaba 框架下的MCP服务与Nacos注册中心整合的必要性,学会Spring AI Alibaba-基于Nacos的MCP实现方法

paopao_wu的专栏 788

OpenHarmony + AI:深度解析 Whisper.cpp 智慧语音系统级移植与 NAPI 封装实战

【代码】OpenHarmony + AI:深度解析 Whisper.cpp 智慧语音系统级移植与 NAPI 封装实战。

m0_67505153的博客 187

基于Visual C++.NET的GDI+编程快速入门

   工具软件   办公软件   操作系统   网络安全   设计在线   程序开发   教程宝典   软件下载   软件论坛 GDI+编程快速入门  ⊙技术专题精选Visual C++.NET编程基础讲座 完美的C++:C++/CLIC#开发终端式短信的原理和方法DirectShow编程实战音视频精选⊙相关文章  最新推荐 基于Visual C++.NET的GDI+编程快速入门  GDI+是图

ark1111的专栏 1664

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

上一篇: 在VB.NET编程中使用数组
下一篇: Visual Basic.NET和GDI+共创图标编辑器
xmlscript
博客等级 码龄25年 1粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值