第三讲一个简单的二维光栅图形软件包 SRGP( Simple raster graphics Package 3.1用图形软件包绘图 3.2基本的交互处理 33光栅操作 出流 应用 应用 图形 SRGP 模型 程序 硬件 输入流 20212/24 Graphics Lab PKU
2021/2/24 Graphics Lab.PKU 1 第三讲 一个简单的二维光栅图形软件包 3.1 用图形软件包绘图 3.2 基本的交互处理 3.3 光栅操作 SRGP(Simple Raster Graphics Package) 应用 模型 应用 程序 SRGP 图形 硬件 设备 输出流 输入流
31用图形软件包绘图 图元的声明 图元的属性 ?填充图元及属性 ?保存和恢复图元的属性 字符 20212/24 Graphics Lab PKU
2021/2/24 Graphics Lab.PKU 2 3.1 用图形软件包绘图 ? 图元的声明 ? 图元的属性 ? 填充图元及属性 ? 保存和恢复图元的属性 ? 字符
31用图形软件包绘图 图元的声明 绘图纸,屏幕, 坐标系 扫描转换:将顶点(参数表示的图形)转换为点阵表示的图 形 表示的图形扫描转换 点阵表示 的图形 用户 显示系统 20212/24 Graphics Lab PKU
2021/2/24 Graphics Lab.PKU 3 3.1 用图形软件包绘图 • 图元的声明 – 绘图纸,屏幕, – 坐标系 – 扫描转换:将顶点(参数表示的图形)转换为点阵表示的图 形 扫描转换 顶点(参数) 表示的图形 用户 点阵表示 的图形 显示系统
3.1用图形软件包绘图 基本图元绘制:点、直线段、折线、 多边形、圆弧、字符 数据类型: Struct Point intx, y; i typedef int* VertexCoordList typedef Point > VertexList 20212/24 Graphics Lab PKU
2021/2/24 Graphics Lab.PKU 4 3.1用图形软件包绘图 • 基本图元绘制:点、直线段、折线、 多边形、 圆弧、字符。 • 数据类型: Struct Point{ int x, y;} typedef int * VertexCoordList; typedef Point *VertexList;
Void PutPixel(int x, int y, int color) /{点函数, color:颜色值。 Void line coord(int 0, int yO, int xl, int y1) Void Line(point * pnto, point* pnt 1) /(线函数 4084 bowtieArray[1 70 eArray[2] 70 60 bowtieArray(3 40 76 bowi e Array[4] 1060 bowtieArray 5] Void polyline Coord( int vertexCount, Vertex CoordList xArray Vertex CoordList aRray) Void polyline(int vertex Count, VertexList vertices) /折线函数。 20212/24 Graphics Lab PKU
2021/2/24 Graphics Lab.PKU 5 Void PutPixel(int x, int y, int color); //画点函数,color :颜色值。 Void LineCoord(int x0, int y0,int x1,int y1); Void Line (Point *pnt0, Point * pnt1); //画线函数 Void polylineCoord( int vertexCount,VertexCoordList xArray, VertexCoordList yArray); Void polyline(int vertexCount, VertexList vertices) //画折线函数
Void marker coord(int x, int y) Void Marker( Point *pt) 端点做标记。 Void Polygon(int Vertex Count, Vertexlist vertices) /多边形。 Void RectanglePoint(Point leftBottom Point* rightTop) /{矩形 20212/24 Graphics Lab PKU
2021/2/24 Graphics Lab.PKU 6 Void MarkerCoord(int x, int y); Void Marker(Point *pt); //端点做标记。 Void Polygon(int VertexCount, VertexList vertices); //画多边形。 Void RectanglePoint(Point* leftBottom, Point* rightTop); //画矩形
Void Circle Arc(Point *center, int radius int startAngle, int endAngle) /圆弧 Void EllipseArc(rectangle *extern Rect, int startAngle, int endAngle) /椭圆 Typedef struct( Point leftBottom, right Top; Rectangle 起始角45度 终止交270度 20212/24 Graphics Lab PKU
2021/2/24 Graphics Lab.PKU 7 Void CircleArc(Point *center, int radius, int startAngle,int endAngle) //画圆弧 Void EllipseArc(Rectangle *externRect, int startAngle,int endAngle) //画椭圆 (x3,y3) (x4,y4) Typedef struct{ Point leftBottom,rightTop;} Rectangle
图元属性 ·线型和线宽 Void Setline style(enum Line Style lineStyle) Void Setline width(int line Width) 枚举变量 line Styple 预定义之线型 CONTINUOUS、 DASHED、 DOTTED 图元在显示时被扫描转换成离散的像素写入帧缓冲 器中,线型控制可看作有选择地写像素的位屏蔽器 ( bit marker)-位屏蔽器为“0′表示帧缓存中相应的像素值不变 (即透明),为‘1’表示用线段的颜色值代替帧缓存中相应的像素值 20212/24 Graphics Lab PKU
2021/2/24 Graphics Lab.PKU 8 图元属性 • 线型和线宽 • Void SetLineStyle(enum LineStyle lineStyle); • Void SetLineWidth(int lineWidth); • 枚举变量 lineStyple • 预定义之线型CONTINUOUS、DASHED、DOTTED • 图元在显示时被扫描转换成离散的像素写入帧缓冲 器中,线型控制可看作有选择地写像素的位屏蔽器 (bit marker). --位屏蔽器为‘0’表示帧缓存中相应的像素值不变 (即透明),为‘1’表示用线段的颜色值代替帧缓存中相应的像素值
图元属性 SRGP中,设置颜色属性有三种方式 三种指定颜色的方式 通过查色表索引值 通过颜色名称 通过红、绿、兰三分量 Void Setcolor By Name(cnum Colors colorName) ∥使用逻辑颜色名,实际对应的颜色取决于系统查色表 Void Setcolor(int colorIndex) ∥直接使用整数值来指定, colorIndex即是指向査色表某表项的 索引值 Void Setcolor (int red, int green, int blue) ∥直接赋颜色分量值(对真彩色系统而言) 20212/24 Graphics Lab PKU
2021/2/24 Graphics Lab.PKU 9 图元属性 • SRGP中,设置颜色属性有三种方式: • 三种指定颜色的方式 – 通过查色表索引值 – 通过颜色名称 – 通过红、绿、兰三分量 Void SetColorByName(cnum Colors colorName); //使用逻辑颜色名,实际对应的颜色取决于系统查色表 Void SetColor(int colorIndex); //直接使用整数值来指定,colorIndex即是指向查色表某表项的 索引值 Void SetColor(int red, int green, int blue); //直接赋颜色分量值(对真彩色系统而言)
填充图元及其属性 封闭的图元有二种绘制方式 -线画图:只画出边框; 填充图:填充其内部区域; Void Fillrectangle( Rectangle*rec)/矩形 Void FillPolygon(int vertex Count, VertexList Vertices) ∥多边形 Void Fillellipse( Rectangle* extentRect),∥椭圆 Void FillEllipse Arc(rectangle* extent Rect, int startAngle, int endAngle ∥)形 20212/24 Graphics Lab PKU
2021/2/24 Graphics Lab.PKU 10 填充图元及其属性 封闭的图元有二种绘制方式 -- 线画图:只画出边框; -- 填充图:填充其内部区域; Void FillRectangle(Rectangle *rec);//矩形 Void FillPolygon(int vertexCount, VertexList Vertices); //多边形 Void FillEllipse(Rectangle * extentRect); // 椭圆 Void FillEllipseArc (Rectangle * extentRect,int startAngle,int endAngle); //扇形