C语言线条样式和填充样式都有哪些? 怎样设置?

2024-06-15 11:52

本文主要是介绍C语言线条样式和填充样式都有哪些? 怎样设置?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、问题

        线条样式和填充样式都有哪些?该怎样设置?

二、解答

        在画图前,要先设置线条样式和填充样式,它们直接决定图形的显⽰效果。

1.线条样式

  (1) setlinestyle( ) 函数。

void far setlinestyle(int linestyle, unsigned upattem,int thickness);/*指定画线的样式(linestyle 或 upatttern)和宽度 (thickness)*/

线条样式常量值如下:

  • SOLID LINE=0:实线。
  • DOTTED LINE=1: 点线。
  • CENTER LINE=2:中⼼线。
  • DASHED LINE=3:点画线。
  • USERBIT LINE=4:⽤户定义线。

画线宽度常量值如下:

  • NORM WIDTH=1:⼀点宽。
  • THICK WIDTH-3:三点宽。

在没有对线条特性进⾏设定之前,TC ⽤其默认值,即⼀点宽的实线。

        对于 upattern,只有 linestyle 选择 USERBITLINE 时才有意义(选择其他线型, uppattern 取0即可)。uppattern 的16 位⼆进制数的每⼀位代表1像素,其值为1显⽰,为0 则不显⽰。

(2)getlinesettings( )函数。

void far getlinesettings(struct linesettingstypefar *lineinfo); /*将有关线条的信息存放到由 lineinfo 指向的结构中*/

其中 linesettingstype 的结构如下:

struct linesettingstype
{int linestyle;unsigned upattern;int thickness;
}

例如,下⾯两句程序可以读出当前线条的特性。

struct linesettingstype *info; 
getlinesettings(info);

(3) setwritemode(函数。

void far setwritemode(int mode);/*⽤于指定画线的⽅式*/

        如果 mode=0,则表⽰画线时将所画位置的原来信息覆盖(这是 TC 的默认⽅式)。如果 mode=1,则表⽰画线时⽤当前特性的线与所画之处原有的线进⾏异或(XOR)操作, 实际上画出的线是原有线与当前指定的线进⾏异或后的结果。因此,当线的特性不变,进 ⾏两次画线操作相当于没有画线。

        有关线型设定和画线函数的实例程序如下。

#include <stdio.h>
#include <alloc.h>
#include <graphics.h>
int main()
{int driver, mode, ij;struct linesettingstype lineset;detectgraph(&driver, &mode);initgraph(&driver, &mode, "d:\\tc");for (i = 0; i < 4; i++){setlinestyle(i, 0, 2 * j + 1);line(100, 100 + (i * 4 + j) * 20, 300, 100 + (i * 4 + j) * 20);}setlinestyle(4, 0xb77f, 1);line(100, 400, 300, 400);getch();closegraph();
}

 2. 设置填充样式

(1) setfillstyle( ) 函数。

void far setfillstyle(int pattern, int color);/*设置填充模式和填充颜⾊*/

填充模式 patternr 的枚举定义如下。

enum fill_patterns
{EMPTY_FILL,      /*0背景颜⾊填充*/SOLID_FILL,      /*1实⼼填充*/LINE_FILL,       /*2 ---填充1 */LTSLASH_FILL,    /*3///填充*/SLASH_FILL,      /*4 粗///填充*/BKSLASH_FILL,    /*5 粗⼼填充 */LTBKSLASH_FILL,  /*6\\\填充*/HATCH_FILL,      /*7 直⽅⽹格填充*/XHATCH_FILL,     /*8 斜⽹格填充*/INTERLEAVE_FILL, /*9 间隔点填充*/WIDE_DOT_FILL,   /*10 密集点填充*/CLOSE_DOT_FILL,  /*11密集点填充*/USER_FILL        /*12 ⽤户定义 */
};

(2) setfillpattern( ) 函数。

        函数的功能是选择⽤户定义的填充模式,与 setfillstyle( ) 功能相近,后者可以设置系统预定义的填充样式。sestfillpattern 的样式定义⽅法,⽤ 8*8 的点阵说明,C语⾔中⼀个字符占⼀个字节,8位⼆进制,可构成8*8 点阵的⼀⾏,8个字符即完整8*8点阵。

(3) getfilsettings( ) 函数。

void getfillsettings(struct fillsettingstype far *fillinfo);

函数的功能是获取系统预定义的填充模式和填充颜⾊放⼊ filinfo 结构中。

struct fillsettingstype
{int pattern;/*现⾏填充模式*/ int color;/*现⾏填充模式*/
};

(4) getfillpattern()函数。

void getfillpattern(char far *pattern);

        函数的功能是获取⽤户定义的填充模式

#include <stdio.h>
#include <graphics.h>
int main()
{int driyer, mode, i, j;char buft[100];char pattern[8] = {0x80, 0x80, 0x80, Oxfr, Ox ff, 0x00, 0x00, 0x00};detectgraph(&driver, &mode);initgraph(&driver, &mode, "d:ltc");settextjustify(CENTER TEXT, CENTER_ TEXT);for (i = 0; i < 3; i++){setfillstyle(i * 4 + j, 3);fillellipse(50 + j * 100, 50 + i * 100, 40, 40);printf(buf, "pattern=%d", 4 + j);outtextxy(50 + j * 100, 50 + i * 100 + 50, buf);}setfillpattern(pattern, 3);fillellipse(50, 350, 40, 40);outtextxy(50, 410, "user define");getch();closegraph();
}

三、总结

        在不需要特殊效果的时候,不设置线条样式和填充样式,即直接使⽤其默认样式实线和实⼼填充,就可以得到我们所需要的效果。

这篇关于C语言线条样式和填充样式都有哪些? 怎样设置?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1063381

相关文章

PostgreSQL 默认隔离级别的设置

《PostgreSQL默认隔离级别的设置》PostgreSQL的默认事务隔离级别是读已提交,这是其事务处理系统的基础行为模式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一 默认隔离级别概述1.1 默认设置1.2 各版本一致性二 读已提交的特性2.1 行为特征2.2

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

mtu设置多少网速最快? 路由器MTU设置最佳网速的技巧

《mtu设置多少网速最快?路由器MTU设置最佳网速的技巧》mtu设置多少网速最快?想要通过设置路由器mtu获得最佳网速,该怎么设置呢?下面我们就来看看路由器MTU设置最佳网速的技巧... 答:1500 MTU值指的是在网络传输中数据包的最大值,合理的设置MTU 值可以让网络更快!mtu设置可以优化不同的网

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

MySQL 设置AUTO_INCREMENT 无效的问题解决

《MySQL设置AUTO_INCREMENT无效的问题解决》本文主要介绍了MySQL设置AUTO_INCREMENT无效的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录快速设置mysql的auto_increment参数一、修改 AUTO_INCREMENT 的值。

Go语言中泄漏缓冲区的问题解决

《Go语言中泄漏缓冲区的问题解决》缓冲区是一种常见的数据结构,常被用于在不同的并发单元之间传递数据,然而,若缓冲区使用不当,就可能引发泄漏缓冲区问题,本文就来介绍一下问题的解决,感兴趣的可以了解一下... 目录引言泄漏缓冲区的基本概念代码示例:泄漏缓冲区的产生项目场景:Web 服务器中的请求缓冲场景描述代码

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个

详解Linux中常见环境变量的特点与设置

《详解Linux中常见环境变量的特点与设置》环境变量是操作系统和用户设置的一些动态键值对,为运行的程序提供配置信息,理解环境变量对于系统管理、软件开发都很重要,下面小编就为大家详细介绍一下吧... 目录前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变

Go语言中Recover机制的使用

《Go语言中Recover机制的使用》Go语言的recover机制通过defer函数捕获panic,实现异常恢复与程序稳定性,具有一定的参考价值,感兴趣的可以了解一下... 目录引言Recover 的基本概念基本代码示例简单的 Recover 示例嵌套函数中的 Recover项目场景中的应用Web 服务器中

安装centos8设置基础软件仓库时出错的解决方案

《安装centos8设置基础软件仓库时出错的解决方案》:本文主要介绍安装centos8设置基础软件仓库时出错的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录安装Centos8设置基础软件仓库时出错版本 8版本 8.2.200android4版本 javas