C语言图形处理

合集下载

C语言 BMP图片处理

C语言 BMP图片处理

C语言BMP图片处理BMP是bitmap的缩写形式,bitmap顾名思义,就是位图也即Windows位图。

它一般由4部分组成:文件头信息块、图像描述信息块、颜色表(在真彩色模式无颜色表)和图像数据区组成。

在系统中以BMP为扩展名保存。

打开Windows的画图程序,在保存图像时,可以看到三个选项:2色位图(黑白)、16色位图、256色位图和24位位图。

这是最普通的生成位图的工具,在这里讲解的BMP位图形式,主要就是指用画图生成的位图(当然,也可以用其它工具软件生成)。

现在讲解BMP的4个组成部分:1.文件头信息块0000-0001:文件标识,为字母ASCII码“BM”。

0002-0005:文件大小。

0006-0009:保留,每字节以“00”填写。

000A-000D:记录图像数据区的起始位置。

各字节的信息依次含义为:文件头信息块大小,图像描述信息块的大小,图像颜色表的大小,保留(为01)。

2.图像描述信息块000E-0011:图像描述信息块的大小,常为28H。

0012-0015:图像宽度。

0016-0019:图像高度。

001A-001B:图像的plane(平面?)总数(恒为1)。

001C-001D:记录像素的位数,很重要的数值,图像的颜色数由该值决定。

001E-0021:数据压缩方式(数值位0:不压缩;1:8位压缩;2:4位压缩)。

0022-0025:图像区数据的大小。

0026-0029:水平每米有多少像素,在设备无关位图(.DIB)中,每字节以00H 填写。

002A-002D:垂直每米有多少像素,在设备无关位图(.DIB)中,每字节以00H 填写。

002E-0031:此图像所用的颜色数,如值为0,表示所有颜色一样重要。

3.颜色表颜色表的大小根据所使用的颜色模式而定:2色图像为8字节;16色图像位64字节;256色图像为1024字节。

其中,每4字节表示一种颜色,并以B(蓝色)、G(绿色)、R(红色)、alpha(像素的透明度值,一般不需要)。

c语言图形处理函数及其应用

c语言图形处理函数及其应用
补充内容:
图形处理函数及其应用
主要内容:
一、图形初始化及应用设置函数 二、常用的作图函数 三、字符屏幕控制函数 四、图形处理函数应用
一、图形初始化及应用设置函数
1、使用#include “graphics.h” 2、初始化图形系统函数 void far initgraph(gdrive,gmode,gpath) int far *gdrive, *gmode, *gpath; gdrive:图形驱动器代号,gmode:图形模式代号, gpath: 图形驱动程序路径。 如:常用方式: int gdrive,gmode; gdrive=DETECT; initgraph(&gdrive,&gmode, “d:\\tc”); 3、擦除整个图形屏幕,并将cp(当前位置)移 到原点(0,0) void far cleardevice(void)
14、设置正文字形、显示方向、字符大小函数 void far settextstyle(font, direction, charsize) int font, direction, charsize; (1)font(字形)取值 0:8*8字形,1:3倍笔划字形, 2:小号笔划字形, 3:无衬线笔划字形, 4:黑体笔划字形。 (2)direction(显示方向)取值,0:自左向右,1:从 底向上。 (3)charsize(字符放大因子)取值 0:用户自定义, 1:8*8大小,2:16*16大小, ……。最大为10倍。 说明:该函数影响outtext( )和outtextxy( )两个函数。
浅青 浅品红
13、设置画线宽度和线型的函数 void far setlinestyle(linestyle, upattern, thickness) int linestyle, thickness; unsigned upattern; linestyle(线型)取值,0:实线,1:点,2:长短, 3:长虚线,4:自定义线型。 thickness(宽度)取值: 1、3。 upattern:当linestyle为4时起作用。 14、检测图象区域所含的字节数函数 unsigned far imagesize(left, top, right, bottom) int left, top, right, bottom; 返回值为区域内图象的字节数。 15、申请分配动态存储区函数(包含在stdlib.h中) void *malloc(unsigned int size) 返回存储区的首地址。若不成功,则返回NULL。

C语言控制台图形化编程

C语言控制台图形化编程

C语言控制台图形化编程在计算机编程领域,图形化界面一直是提高用户体验的重要手段之一。

在C语言中,虽然没有直接支持图形化编程的库函数,但我们可以利用一些技巧和库来实现控制台图形化编程。

本文将介绍如何在C语言中通过控制台绘制基本的图形和实现简单的交互效果。

一、基本概念在开始编写控制台图形化程序之前,我们需要了解一些基本概念。

首先是像素和字符的概念,控制台上的每个字符都可以看作一个像素,可以通过改变字符的颜色来实现绘图效果。

其次是控制台的坐标系,通常以左上角为原点,向右为X轴正方向,向下为Y轴正方向。

二、绘制基本图形1. 绘制点在控制台中绘制点可以通过改变字符的颜色实现,可以使用Windows API函数SetConsoleTextAttribute来设置字符的颜色。

例如,下面代码可以绘制一个红色的点:```c#include <windows.h>#include <stdio.h>void gotoxy(int x, int y) {COORD pos;pos.X = x;pos.Y = y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);}void setcolor(int color) {HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(hConsole, color);}int main() {int x = 10, y = 5;gotoxy(x, y);setcolor(FOREGROUND_RED);printf("*");return 0;}```2. 绘制线段要在控制台中实现绘制线段的效果,我们可以利用字符的重复打印来模拟直线的效果。

例如,下面代码可以绘制一条水平线段:```c#include <stdio.h>void setcolor(int color) {printf("\033[1;%dm", color);}int main() {int x1 = 10, x2 = 20, y = 5;setcolor(31); // 设置为红色for (int i = x1; i <= x2; i++) {printf("*");}return 0;}```3. 绘制矩形要在控制台中绘制矩形,可以利用循环来控制每行的输出。

C语言图形编程入门指南

C语言图形编程入门指南

C语言图形编程入门指南C语言作为一种广泛应用于软件开发领域的编程语言,具有高效、灵活和可移植的特点。

而图形编程则是C语言中一个重要的应用领域,它可以帮助开发者创建各种各样的图形界面和交互式应用程序。

本文将为读者提供一份C语言图形编程入门指南,帮助初学者快速入门并掌握基本的图形编程技巧。

一、图形编程的基本原理图形编程主要涉及两个方面:图形绘制和用户交互。

图形绘制是指在屏幕上绘制各种图形元素,如点、线、矩形和圆等。

用户交互则是指通过鼠标、键盘等输入设备与程序进行交互,实现用户的操作和反馈。

在C语言中,图形编程主要依赖于图形库的支持。

常见的图形库有BGI (Borland Graphics Interface)和OpenGL等。

BGI是一种基于DOS操作系统的图形库,而OpenGL则是一种跨平台的图形库,支持多种操作系统和硬件平台。

二、BGI图形编程入门BGI图形编程是C语言中最常用的图形编程方法之一。

它提供了一系列的函数和命令,可以实现图形绘制和用户交互。

下面是一个简单的BGI图形编程示例:```c#include <graphics.h>int main(){int gd = DETECT, gm;initgraph(&gd, &gm, "");circle(200, 200, 100);closegraph();return 0;}```上述代码使用了BGI图形库中的`initgraph`函数来初始化图形环境,`circle`函数用于绘制一个圆,`getch`函数用于等待用户按下任意键,`closegraph`函数用于关闭图形环境。

通过这段代码,我们可以在屏幕上绘制一个半径为100的圆,并等待用户的操作。

三、OpenGL图形编程入门OpenGL是一种跨平台的图形库,它提供了丰富的函数和命令,可以实现高效的图形渲染和复杂的图形效果。

下面是一个简单的OpenGL图形编程示例:```c#include <GL/glut.h>void display(){glClear(GL_COLOR_BUFFER_BIT);glBegin(GL_POLYGON);glVertex2f(-0.5, -0.5);glVertex2f(0.5, -0.5);glVertex2f(0.5, 0.5);glVertex2f(-0.5, 0.5);glFlush();}int main(int argc, char** argv){glutInit(&argc, argv);glutCreateWindow("OpenGL Example");glutDisplayFunc(display);glutMainLoop();return 0;}```上述代码使用了OpenGL图形库中的`glutInit`函数来初始化图形环境,`glutCreateWindow`函数用于创建一个窗口,`glutDisplayFunc`函数用于指定绘制函数,`glutMainLoop`函数用于进入消息循环。

C语言数字图像处理之直方图均衡化

C语言数字图像处理之直方图均衡化

C语⾔数字图像处理之直⽅图均衡化本⽂实例为⼤家分享了C语⾔直⽅图均衡化的具体代码,供⼤家参考,具体内容如下原理直⽅图均衡化(Histogram Equalization) ⼜称直⽅图平坦化,实质上是对图像进⾏⾮线性拉伸,重新分配图像象元值,使⼀定灰度范围内象元值的数量⼤致相等。

这样,原来直⽅图中间的峰顶部分对⽐度得到增强,⽽两侧的⾕底部分对⽐度降低,输出图像的直⽅图是⼀个较平的分段直⽅图:如果输出数据分段值较⼩的话,会产⽣粗略分类的视觉效果。

直⽅图是表⽰数字图像中每⼀灰度出现频率的统计关系。

直⽅图能给出图像灰度范围、每个灰度的频度和灰度的分布、整幅图像的平均明暗和对⽐度等概貌性描述。

灰度直⽅图是灰度级的函数, 反映的是图像中具有该灰度级像素的个数, 其横坐标是灰度级r, 纵坐标是该灰度级出现的频率( 即像素的个数) pr( r) , 整个坐标系描述的是图像灰度级的分布情况, 由此可以看出图像的灰度分布特性, 即若⼤部分像素集中在低灰度区域, 图像呈现暗的特性; 若像素集中在⾼灰度区域, 图像呈现亮的特性。

灰度数字图像是每个像素只有⼀个采样颜⾊的图像。

这类图像通常显⽰为从最暗⿊⾊到最亮的⽩⾊的灰度。

灰度图像与⿊⽩图像不同,在计算机图像领域中⿊⽩图像只有⿊⽩实现流程:1)统计每个灰度级像素点的个数2)计算灰度分布密度3)计算累计直⽅图分布4)累计分布取整,保存计算出来的灰度映射关系处理图⽚规格800*600 8位灰度单通道原图直⽅图均衡化分析:本次实验中,我故意把原图调暗,进⾏直⽅图均衡化后可以明显感受到整幅图像亮度增⼤了,⽽且某些细节⽅⾯更加突出。

出现问题最初进⾏直⽅图均衡化时,输出结果如下:经分析,是没有对数组初始化置零导致的。

Hist数组是进⾏⼀个统计像素点个数的数组,最初倘若不置零,结果必然毫⽆意义。

故⽽添加数组内存置零的操作:经测试,问题解决。

附代码#include <stdio.h>#include <stdlib.h>#include <memory.h>#define height 600#define width 800typedef unsigned char BYTE; // 定义BYTE类型,占1个字节int main(void){FILE *fp = NULL;//BYTE Pic[height][width];BYTE *ptr;BYTE **Pic = new BYTE *[height];for (int i = 0; i != height; ++i){Pic[i] = new BYTE[width];}fp = fopen("weiminglake_huidu.raw", "rb");ptr = (BYTE*)malloc(width * height * sizeof(BYTE));//创建内存for (int i = 0; i < height; i++){for (int j = 0; j < width; j++){fread(ptr, 1, 1, fp);Pic[i][j] = *ptr; // 把图像输⼊到2维数组中,变成矩阵型式ptr++;}}fclose(fp);int hist[256];float fpHist[256];float eqHistTemp[256];int eqHist[256];int size = height *width;int i, j;memset(&hist, 0x00, sizeof(int) * 256);memset(&fpHist, 0x00, sizeof(float) * 256);memset(&eqHistTemp, 0x00, sizeof(float) * 256);for (i = 0; i < height; i++) //计算差分矩阵直⽅图直⽅图统计每个灰度级像素点的个数{for (j = 0; j < width; j++){unsigned char GrayIndex = Pic[i][j];hist[GrayIndex] ++;}}for (i = 0; i< 256; i++) // 计算灰度分布密度{fpHist[i] = (float)hist[i] / (float)size;}for (i = 0; i< 256; i++) // 计算累计直⽅图分布{if (i == 0){eqHistTemp[i] = fpHist[i];}else{eqHistTemp[i] = eqHistTemp[i - 1] + fpHist[i];}}//累计分布取整,保存计算出来的灰度映射关系for (i = 0; i< 256; i++){eqHist[i] = (int)(255.0 * eqHistTemp[i] + 0.5);}for (i = 0; i < height; i++) //进⾏灰度映射均衡化{for (j = 0; j < width; j++){unsigned char GrayIndex = Pic[i][j];Pic[i][j] = eqHist[GrayIndex];}}fp = fopen("output.raw", "wb");for (i = 0; i < height; i++){for (j = 0; j < width; j++){fwrite(&Pic[i][j], 1, 1, fp);}}fclose(fp);return 0;}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

《如何使用C语言实现图形编程?》

《如何使用C语言实现图形编程?》

《如何使用C语言实现图形编程?》
C语言是一种多用途的编程语言。

它可以用于不同类型的软件
开发,其中包括图形编程。

在这里,我们将着重介绍如何使用
C语言来实现图形编程。

首先,要求学习者具备基本的C、C++知识,特别是对指针的
概念有所理解和运用。

此外,理解图形库如OpenGL等的基本原理也是必要的。

之后,学习者需要正确下载并安装图形库,例如OpenGL。


后学习者需要设置图形库的API函数库,使之可以在开发环
境中正确运行。

学习者还需要下载及安装支持OpenGL的图元库,如GLU库。

接下来,学习者需要准备并编写C语言代码,以绘制多种图元,如:点、线、多边形、圆形等,借此实现图形编程。

开发者需要通过调用OpenGL函数实现绘图功能,以及使用转换函数用于变换图元位置和大小。

此外,开发者还可以通过调用窗口库函数,实现创建窗口及相应的窗口事件,从而实现交互式图形编程。

另外,开发者可以通过调用GLU函数,创建立体几何体,以及调用OpenGL的
着色函数,实现图形着色及透明效果。

最后,学习者可以执行编译,调试并运行他们的C语言程序,以看到其实现的图形编程效果。

总之,使用C语言实现图形编程的方法是复杂的,需要学习者对C语言、C++以及OpenGL等相关图形库有所了解,才能进行有效的图形编程实现。

C语言中的图形处理与图像识别技术

C语言中的图形处理与图像识别技术

C语言中的图形处理与图像识别技术C语言是一种广泛用于编写系统软件和应用程序的高级编程语言。

在C语言中,图形处理和图像识别技术是非常重要的应用领域。

图形处理技术涉及到图像的生成、编辑和显示,而图像识别技术则涉及到图像的特征提取和识别。

本文将介绍C语言中常用的图形处理与图像识别技术。

首先,图形处理技术在C语言中的应用非常广泛。

我们可以利用C语言编写程序来生成各种几何图形,如线条、矩形、圆形等。

通过调用图形库函数,我们可以实现图形的绘制和显示。

此外,C语言还支持图形的编辑和变换操作,比如旋转、缩放、平移等。

通过这些操作,我们可以实现对图形的各种处理,从而满足不同应用场景的需求。

另外,图像识别技术在C语言中的应用也越来越重要。

图像识别技术可以帮助我们从图像中提取有用的信息,并进行进一步的处理和分析。

在C语言中,我们可以利用图像处理库来实现图像的读取、处理和识别。

通过这些库函数,我们可以实现图像的特征提取、目标检测、人脸识别等功能。

这些功能对于智能监控、医学影像分析、自动驾驶等领域具有重要意义。

在使用C语言进行图形处理和图像识别时,需要注意以下几点。

首先,要熟悉C语言的基本语法和图形处理库函数的使用方法。

其次,要理解图形处理和图像识别的基本原理,包括像素处理、颜色空间转换、特征提取等。

最后,要不断实践和调试程序,从而提高对图形处理和图像识别技术的理解和掌握。

总之,C语言中的图形处理与图像识别技术是一个非常有趣和有挑战的领域。

通过学习和实践,我们可以掌握这些技术,从而实现各种图形处理和图像识别应用。

希望本文对你有所帮助,谢谢阅读!。

C语言图像处理函数大全

C语言图像处理函数大全

C语言图像处理函数大全,完整版∙∙1.图像平移图像平移只是改变图像在屏幕上的位置,图像本身并不发生变化。

假设原图像区域左上角坐标为(x0, y0),右下角坐标为(x1, y1),将图像分别沿x和y轴平移dx和dy,则新图像的左上角坐标为(x0 +dx, y0+dy),右下角坐标为(x1+dx, y1+dy)。

坐标平移变换公式为:x′ = x +dxy′ = y +dy在屏幕上实现图像的移动分为四个步骤:⑴保存原图像到缓冲区。

⑵擦除原图像。

⑶计算平移后的新坐标。

⑷在新的坐标位置重新显示原图像。

其中,擦除原图像的方法与图形变换中擦除原图形的方法一致,在实现中仍采用XOR异或方式画图擦除原图像。

对于新坐标值的计算还需要考虑边界情况,不要在图像平移后超出允许的屏幕范围。

此外,如果采用C函数getimage()和putimage()来保存和恢复图像,则图像的大小不能超过64K。

2.图像颠倒图像颠倒是指把定义好的图像区域上下翻转地显示在屏幕上。

分析图像颠倒的过程,可发现每行的图像信息都保持不变,而只是改变了行的顺序,将第一行与最后的第n行相互交换,第二行与第n-1行交换……,依此类推,从而实现了图像的颠倒。

只需采用按行交换的方式,即可方便地修改缓冲区内容,实现图像的颠倒。

基本步骤如下:(1) 用getimage()保存原图像,并擦除原图像。

(2) 计算图像的高度,即行数height;计算图像宽度width;计算保存一行图像信息height = bottom -top +1;width = right -left +1;linebytes = (width +7) /8 *4;(3)利用行交换缓冲区linebuf在图像内存缓冲区中进行信息交换,即把第一行与最末行交换,第2行与第n-1行交换……,依此类推,直至全部交换完毕。

(4)把交换后的图像缓冲区内容重新显示在屏幕上。

3.图像镜像变换镜像变换是指将指定区域的图像左右翻转地显示在屏幕。

C语言程序设计-二维图形图像处理

C语言程序设计-二维图形图像处理
³ 基本形状控件
u Rectangle、Ellipse、Line、PolyLine、Polygen
³ Path控件
u 必须指定需要绘制的几何Biblioteka 形1011.2.1形状
3.Shape对象共有的属性
表11-1 从Shape派生的对象共有的常用属性
属性
说明
Stroke
获取或设置轮廓的Brush
StrokeThicknes s
2.即时模式和保留模式 绘制图形图像时,两种基本的呈现技术:即时 模式和保留模式。
³ GDI+提供的API都是用“即时模式”来呈现,这 种模式只保存界面上可见部分的图形图像。
³ 在WPF应用程序中,系统采用“保留模式”来负 责图形图像的呈现,其内部用一组序列化绘图状 态来保存这些对象,这样就可以自动重绘,而不 需要程序员去维护这些状态。
26
11.3 钢笔和画笔
11.3.1 基本概念 11.3.2 TileBrush类 11.3.3 纯色和渐变画笔 11.3.4 图像画笔 11.3.5 绘制画笔 11.3.6 可视化画笔
11.3.1基本概念
钢笔(Pen)和画笔(Brush)是图形图像绘 制的基础。 利用继承自Brush的派生类,既可以绘制形状 和几何图形,也可以绘制图像和视频。 1.Pen类
获取或设置轮廓的宽度
Fill
获取或设置内部填充的Brush
Stretch
用枚举值说明如何填充形状的内部。可选的枚举值如下。 None: 不 拉 伸 。 内 容 保 持 原 始 大 小 。 Fill( 默 认 值 ) : 调 整 内 容 的 大 小 以 填 充 目 标 尺 寸 , 不 保 留 纵 横 比 。 Uniform:在保留内容原有纵横比的同时调整内容的大小至目标尺寸。 UniformToFill:在保留内容原有纵横比的同时调整内容的大小,并填充 至目标尺寸。如果目标矩形的纵横比不同于原矩形的纵横比,则对原内 容进行剪裁以适合目标尺寸

第7章C语言图形编程基础

第7章C语言图形编程基础
在图形方式下,TC支持两种分辨率,一种为高分辨率方式 (CGAHI),像素数为640*200像素,这时背景色是黑的(可以重新设 置),前景色可供选择,但前景色只能是一种,因此图形只显示两种色彩。 CGA的另一种为中分辨率显示方式,像素数为320*200像素,其背景色和 前景色均可由用户选择,但仅能显示4种颜色。在该显示方式下,可有4种 颜色模式供选择,即CGAC0、CGAC1、CGAC2和CGAC3,它们的区别是 所显示的4种颜色有所不同。
textattr(int attr);
参数attr使用了一个字节来描述文本的属性,各位的含义如图7.2所示。
7.2 文本模式下的图形处理
BLINK R
G
B
I
R
G
B
闪烁
背景色
加亮
图7.2 文本属性字节的含义
前景色
其中低4位(0~3)用来设置字符显示的颜色(前景色),对应于颜色值 0~15;第4~6位用于设置背景色;最高位用于设置显示出的字符是否闪 烁。
7.1 图形处理基础
2.EGA EGA(增强型图形适配器)除支持CGA的4种显示模式外,还增加了
分辨率为640*200像素的16色显示方式,TC中称为EGALO(EGA低分辨率 显示方式)和640*350像素的EGA高分辨显示方式(EGAHI),也可显示 16色。 3.VGA VGA(视频图形阵列适配器)是目前流行的PC显示标准,它支持CGA、 EGA的所有显示方式,同时还有640*480像素的高分辨率显示方式 (VGAHI)、640*350像素的中分辨率显示方式(VGAMED)和640*200 像素的低分辨率显示方式(VGALO),它们均有16种显示颜色可供选择。 4.MCGA MCGA的功能与CGA相似,它和CGA是部分兼容的,但有些功能又和VGA 类似,有640*480像素的两色模式。 5.IBM8514 IBM8514适配器具有较强的图形功能,最高分辨率可达1024*768像素,有

C中的并行计算和GPU编程

C中的并行计算和GPU编程

C中的并行计算和GPU编程并行计算和GPU编程是计算机科学领域中的重要概念和技术。

在当今高性能计算和数据处理的需求下,利用并行计算和GPU编程可以显著提高计算速度和效率。

本文将介绍C语言中的并行计算和GPU编程相关内容,以帮助读者更好地理解和应用这一领域的知识。

一、并行计算概述并行计算指的是同时执行多个计算任务,以提高整体计算速度的技术。

与串行计算相比,并行计算可以更充分地利用计算资源,使得计算任务可以更快地完成。

在实际应用中,常见的并行计算模型包括任务并行、数据并行和指令并行等。

二、GPU编程简介GPU编程是利用图形处理器(Graphics Processing Unit)进行计算的一种编程方法。

GPU是一种高性能的并行计算设备,主要用于图形渲染和图像处理。

由于其强大的并行计算能力,GPU也被广泛应用于科学计算、机器学习、深度学习等领域。

在GPU编程中,我们通常使用CUDA(Compute Unified Device Architecture)等编程模型来实现并行计算。

三、C语言中的并行计算C语言是一种广泛使用的编程语言,也可以用于实现并行计算。

在C语言中,我们可以使用多线程编程来实现并行计算。

多线程编程可以将一个程序分成多个子线程同时执行,从而提高整体计算速度。

C语言中的多线程编程主要通过使用线程库(如pthread库)来实现。

通过创建多个线程,并通过合理地划分计算任务,可以实现较为高效的并行计算。

四、GPU编程在C语言中的实现在C语言中,我们可以使用CUDA来实现GPU编程。

CUDA是由NVIDIA公司推出的一种并行计算平台,它提供了一套丰富的编程模型和工具,方便程序员在GPU上进行并行计算。

CUDA编程主要包括两个方面的内容:主机端(Host)和设备端(Device)的编程。

主机端程序负责数据的传输和管理,设备端程序则负责具体的并行计算操作。

在C语言中进行GPU编程需要使用特定的CUDA函数和语法,例如使用__global__关键字定义设备端的函数,使用<<<...>>>符号配置并行计算的线程组织等。

如何利用C语言进行图形化编程

如何利用C语言进行图形化编程

如何利用C语言进行图形化编程在计算机编程领域,图形化编程一直是一个备受关注的话题。

图形化编程可以使程序更加直观、易于理解,同时也能提升用户体验。

虽然C语言是一种被广泛应用的编程语言,但是它本身并不擅长处理图形化界面。

然而,我们可以通过一些技巧和工具来利用C语言进行图形化编程。

一、使用图形库在C语言中,我们可以使用图形库来实现图形化编程。

图形库是一种提供了绘制图形和处理图形界面的工具集。

其中,最常用的图形库是OpenGL和SDL。

OpenGL是一个跨平台的图形库,它可以在多个操作系统上运行,并且支持3D图形的绘制。

而SDL是一个简单易用的图形库,它专注于2D图形的绘制和处理。

通过使用这些图形库,我们可以在C语言中轻松实现图形化界面的编程。

二、学习GUI框架除了使用图形库,我们还可以学习和使用GUI(图形用户界面)框架来进行图形化编程。

GUI框架是一种提供了一系列图形化界面组件和工具的软件库。

在C 语言中,常用的GUI框架有GTK+和Qt。

GTK+是一个开源的GUI框架,它提供了一套丰富的界面组件和事件处理机制,可以用于创建跨平台的图形化应用程序。

而Qt是一个跨平台的GUI框架,它提供了一套完整的界面组件和工具,可以用于创建高度可定制的图形化应用程序。

通过学习和使用这些GUI框架,我们可以在C语言中实现复杂的图形化界面。

三、结合其他编程语言除了使用C语言本身的特性和工具,我们还可以结合其他编程语言来进行图形化编程。

例如,我们可以使用C语言与Python进行集成,利用Python的图形化编程库来实现图形化界面。

Python拥有丰富的图形化编程库,如Tkinter和PyQt,它们提供了一系列易用的界面组件和工具。

通过使用C语言与Python的结合,我们可以充分发挥C语言的计算性能,同时又能利用Python的图形化编程库来实现图形化界面。

四、自定义图形化库如果我们对现有的图形库和GUI框架不满意,我们还可以自己开发一个图形化库。

C语言图象处理方法

C语言图象处理方法

C语言图象处理方法 1.图像平移 图像平移只是改变图像在屏幕上的位置,图像本身并不发生变化。

假设原图像区域左上角坐标为(x0, y0),右下角坐标为(x1, y1),将图像分别沿x和y轴平移dx和dy,则新图像的左上角坐标为(x0 + dx, y0 + dy),右下角坐标为(x1 + dx, y1 + dy)。

坐标平移变换公式为: x′ = x + dx y′ = y + dy 在屏幕上实现图像的移动分为四个步骤: ⑴ 保存原图像到缓冲区。

⑵ 擦除原图像。

⑶ 计算平移后的新坐标。

⑷ 在新的坐标位置重新显示原图像。

其中,擦除原图像的方法与图形变换中擦除原图形的方法一致,在实现中仍采用XOR异或方式画图擦除原图像。

对于新坐标值的计算还需要考虑边界情况,不要在图像平移后超出允许的屏幕范围。

此外,如果采用C函数getimage()和putimage()来保存和恢复图像,则图像的大小不能超过64K。

2.图像颠倒 图像颠倒是指把定义好的图像区域上下翻转地显示在屏幕上。

分析图像颠倒的过程,可发现每行的图像信息都保持不变,而只是改变了行的顺序,将第一行与最后的第n行相互交换,第二行与第n - 1行交换……,依此类推,从而实现了图像的颠倒。

只需采用按行交换的方式,即可方便地修改缓冲区内容,实现图像的颠倒。

基本步骤如下: (1) 用getimage()保存原图像,并擦除原图像。

(2) 计算图像的高度,即行数height;计算图像宽度width;计算保存一行图像信息 height = bottom - top + 1; width = right - left + 1; linebytes = (width + 7) / 8 * 4; (3)利用行交换缓冲区linebuf在图像内存缓冲区中进行信息交换,即把第一行与最末行交换,第2行与第n-1行交换……,依此类推,直至全部交换完毕。

(4)把交换后的图像缓冲区内容重新显示在屏幕上。

C语言图形化编程基础入门

C语言图形化编程基础入门

二、C 的图形模式编程2.1图形编程基础VC+EasyX 库里提供了图形函数就可以在VC 环境下进行图形编程。

对图形函数的操作都是在视口(Viewport )上进行。

用户可以在屏幕上定义大小不同的视口,若不定义视口大小,它就是整个屏幕。

视口是在图形屏幕状态下的概念,用户可访问的最小单位是一个像素(像素这一术语最初用来指显示器上最小的、单独的发光点单元。

然而现在,其含义拓宽为指图形显示器上的最小可访问点)。

文本与图形都可以在视口上显示。

图形视口的左上角坐标为(0,0)。

例如:分辨率为640*480的视口像素点的定位显示器在图形模式下工作时,显示的单位是像素点,通过控制各像素点的颜色和灰度等级来形成图形。

因此绘图的第一步是进行图形模式的初始化,系统进入绘图模式。

(1) initgraph() 图形初始化函数用法: HWND initgraph(int width,int height,int flag = NULL);示例:以下局部代码创建一个尺寸为 640x480 的绘图环境:initgraph(640, 480);例2-1:调用initgraph()设置640*480的图形模式,在屏幕中央显示如下的图形。

参考代码:#include<graphics.h>#include <conio.h>int main(){initgraph(640, 480);line(200, 240, 440, 240);line(320, 120, 320, 360);getch();(closegraph();return 0;}[学习单步执行]试着单步执行刚才的程序,由于绘图和多线程等因素的限制,请务必按照以下步骤尝试(熟练了以后就不用了):1. 将VC取消最大化,并缩小窗口,能看到代码就行。

2. 按一下F10(单步执行),会看到屏幕上出现一个黄色的小箭头,指示将要执行的代码。

3. 当箭头指向initgraph()语句时,按F10,能看到窗口发生了变化。

C#图像处理(二值化,灰阶)

C#图像处理(二值化,灰阶)

C#图像处理(⼆值化,灰阶)1. #region 灰阶2. /// <summary>3. /// 灰阶4. /// </summary>5. /// <param name="b">Bitmap对象</param>6. /// <returns></returns>7. public Bitmap Gray(Bitmap b)8. {9. BitmapData bmData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height),10. ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);11. int stride = bmData.Stride;12. System.IntPtr Scan0 = bmData.Scan0;13. unsafe14. {15. byte* p = (byte*)(void*)Scan0;16. int nOffset = stride - b.Width * 3;17. byte red, green, blue;18. for (int y = 0; y < b.Height; ++y)19. {20. for (int x = 0; x < b.Width; ++x)21. {22. blue = p[0];23. green = p[1];24. red = p[2];25. p[0] = p[1] = p[2] = (byte)(.299 * red + .587 * green + .114 * blue);26. p += 3;27. }28. p += nOffset;29. }30. }31. b.UnlockBits(bmData);32. return b;33. }34. #endregion35.36. #region 固定阈值法⼆值化模块37.38. public Bitmap Threshoding(Bitmap b, byte threshold)39. {40. int width = b.Width;41. int height = b.Height;42. BitmapData data = b.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);43. unsafe44. {45. byte* p = (byte*)data.Scan0;46. int offset = data.Stride - width * 4;47. byte R, G, B, gray;48. for (int y = 0; y < height; y++)49. {50. for (int x = 0; x < width; x++)51. {52. R = p[2];53. G = p[1];54. B = p[0];55. gray = (byte)((R * 19595 + G * 38469 + B * 7472) >> 16);56. if (gray >= threshold)57. {58. p[0] = p[1] = p[2] = 255;59. }60. else61. {62. p[0] = p[1] = p[2] = 0;63. }64. p += 4;65. }66. p += offset;67. }68. b.UnlockBits(data);69. return b;70. }71.72. }73. #endregion74.75. #region Otsu阈值法⼆值化模块76. /// <summary>77. /// Otsu阈值78. /// </summary>79. /// <param name="b">位图流</param>80. /// <returns></returns>81. public Bitmap OtsuThreshold(Bitmap b)82. {83. // 图像灰度化84. // b = Gray(b);85. int width = b.Width;86. int height = b.Height;87. byte threshold = 0;88. int[] hist = new int[256];89.90. int AllPixelNumber = 0, PixelNumberSmall = 0, PixelNumberBig = 0;91. double MaxValue, AllSum = 0, SumSmall = 0, SumBig, ProbabilitySmall, ProbabilityBig, Probability;92.93. BitmapData data = b.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);94. unsafe95. {96. byte* p = (byte*)data.Scan0;97. int offset = data.Stride - width * 4;98.99. for (int j = 0; j < height; j++)100. {101. for (int i = 0; i < width; i++)102. {103. hist[p[0]]++;104.105.106. p += 4;107. }108. p += offset;109. }110. b.UnlockBits(data);111.112. }113. //计算灰度为I的像素出现的概率114. for (int i = 0; i < 256; i++)115. {116.117. AllSum += i * hist[i]; // 质量矩118. AllPixelNumber += hist[i]; // 质量119.120. }121.122. MaxValue = -1.0;123. for (int i = 0; i < 256; i++)124. {125. PixelNumberSmall += hist[i];126. PixelNumberBig = AllPixelNumber - PixelNumberSmall;127. if (PixelNumberBig == 0)128. {129. break;130. }131.132. SumSmall += i * hist[i];133. SumBig = AllSum - SumSmall;134. ProbabilitySmall = SumSmall / PixelNumberSmall;135. ProbabilityBig = SumBig / PixelNumberBig;136. Probability = PixelNumberSmall * ProbabilitySmall * ProbabilitySmall + PixelNumberBig * ProbabilityBig * ProbabilityBig; 137. if (Probability > MaxValue)138. {139. MaxValue = Probability;140. threshold = (byte)i;141. }142.143. }144.145. return this.Threshoding(b, threshold);146. } // end of OtsuThreshold 2147. #endregion。

第10章C语言图形编程

第10章C语言图形编程

3
10.1 图形模式的初始化
【实例10-1】绘制简单的图形。 实例 】绘制简单的图形。 #include <graphics.h> main(){ int gdriver,gmode; int errorcode; detectgraph(&gdriver,&gmode); /*自动探测图形显示器适配器种类 */ 自动探测图形显示器适配器种类 initgraph(&gdriver,&gmode,"g:\\tc\\bgi"); /*初始化图形系统 */ 初始化图形系统 errorcode = graphresult(); if(errorcode!=grOk) { printf("graphics error:%s\n",grapherrormsg(errorcode)); printf("press andy key to halt:"); getch(); exit(1); } circle(200,200,100); getch(); closegraph(); } /*画圆心为(200,200),半径为 的圆 */ 画圆心为( , ),半径为100的圆 ),半径为 画圆心为
7
(3)graphresult() 图形操作结果函数 ) 功能: 函数graphresult()函数返回最后一次图形操作的 功能: 函数 函数返回最后一次图形操作的 代码。 代码。 用法: 此函数调用方式为int graphresult(void); 用法: 此函数调用方式为 C为图形设置了代码,它们是从-15到0的整数值。其含义 为图形设置了代码,它们是从 的整数值。 为图形设置了代码 到 的整数值 见表10-1。调用该函数时,出错状态被复位为 ,所以 见表 。调用该函数时,出错状态被复位为0, 返回值(代码 最好存于变量中,以供需要时检测, 代码)最好存于变量中 返回值 代码 最好存于变量中,以供需要时检测,进行 下一步图形操作。 下一步图形操作。

C语言图形和图像处理

C语言图形和图像处理

C语言图形和图像处理在计算机科学领域中,图形和图像处理是一个重要的研究领域。

图形处理涉及到创建和操控图形对象,而图像处理则是指对图像进行各种操作和改变。

C语言作为一种广泛使用的编程语言,具有强大的计算能力和丰富的图形和图像处理库,可以用于实现各种图形和图像处理应用。

一、理解图形和图像处理1. 图形处理图形处理是通过计算机算法和数学方法创建、绘制和操纵图形对象的过程。

图形对象可以是基本的几何图形,如点、线、多边形,也可以是复杂的图形,如曲线、曲面等。

图形处理常用于计算机图形学、计算机辅助设计和计算机艺术等领域。

2. 图像处理图像处理是对图像进行各种操作和改变的过程。

图像可以是静态图像,如照片、绘画等,也可以是动态图像,如视频、动画等。

图像处理可以包括图像的增强、滤波、分割、压缩等操作,常用于计算机视觉、医学图像处理和数字媒体等领域。

二、C语言图形处理C语言提供了多种图形处理库,如OpenGL、SDL等,可以方便地进行图形对象的创建和绘制。

以下是一个简单的示例代码,用于绘制一个矩形图形。

```c#include <graphics.h>int main() {int gd = DETECT, gm;initgraph(&gd, &gm, "");rectangle(100, 100, 200, 200);getch();closegraph();return 0;}```在上述代码中,`initgraph`函数用于初始化图形环境,`rectangle`函数用于绘制矩形,`getch`函数用于等待用户输入,`closegraph`函数用于关闭图形环境。

三、C语言图像处理C语言也提供了多种图像处理库,如OpenCV、ImageMagick等,可以方便地进行图像的加载、处理和保存。

以下是一个简单的示例代码,用于加载并显示一幅图像。

```c#include <opencv2/opencv.hpp>using namespace cv;int main() {Mat image = imread("image.jpg");namedWindow("Image", WINDOW_NORMAL);imshow("Image", image);waitKey(0);destroyAllWindows();return 0;}```在上述代码中,`imread`函数用于加载图像,`namedWindow`函数用于创建窗口,`imshow`函数用于显示图像,`waitKey`函数用于等待用户按键,`destroyAllWindows`函数用于销毁窗口。

c语言数字图像处理(四):灰度变换

c语言数字图像处理(四):灰度变换

c语⾔数字图像处理(四):灰度变换灰度变换灰度变换函数 s = T(r) 其中r为输⼊图像在(x, y)点处的灰度值,s为输出图像在(x, y)点处的灰度值灰度变换的作⽤上图所⽰的两幅T(s)函数的图像曲线,第⼀幅图可以增强图像对⽐度,第⼆幅图可以对图像进⾏⼆值化处理灰度变换函数反转函数1void reverse(short** in_array, short** out_array, long height, long width)2 {3for (int i = 0; i < height; i++){4for (int j = 0; j <width; j++)5 out_array[i][j] = GRAY_LEVELS - in_array[i][j];6 }7 }最简单的灰度变换函数,将图像中的每个像素点处的颜⾊值反转,对于8位灰度图⽚,⽤255减去原灰度值原图反转图对数变换s = clog(1 + r) c为常数,本次测试中c取101void logarithm(short** in_array, short** out_array, long height, long width) 2 {3for (int i = 0; i < height; i++){4for (int j = 0; j <width; j++)5 out_array[i][j] = (short)(10 * log((1 + in_array[i][j])));6 }7 }可以看出,对数变换降低了图像的对⽐度幂律(伽马)变换s = crγ其中 c 和γ为正常数其中γ<1时,降低对⽐度,γ>1时,提⾼对⽐度γ = 1.21void gamma(short** in_array, short** out_array, long height, long width)2 {3for (int i = 0; i < height; i++){4for (int j = 0; j <width; j++)5 out_array[i][j] = (short)pow(in_array[i][j], 1.2);6 }7 }直⽅图均衡化直⽅图为离散函数h(r k) = n k, 其中r k是第k级灰度值,n k是图像中h灰度为r k的像素个数现在给出上⾯⼏幅图像的直⽅图可以明显看出,对⽐度越⾼的图像,直⽅图的分布越均衡,因此直⽅图均衡化算法可以显著提⾼图像对⽐度直⽅图均衡化算法推导(需⼀定⾼等数学及概率论知识)算法实现1void calculate_histogram(long height, long width, short **image, unsigned long histogram[]) 2 {3short k;4for(int i=0; i < height; i++){5for(int j=0; j < width; j++){6 k = image[i][j];7 histogram[k] = histogram[k] + 1;8 }9 }10 }1112void histogram_equalization(short** in_array, short** out_array, long height, long width)13 {14 unsigned long sum, sum_of_h[GRAY_LEVELS];15double constant;16 unsigned long histogram[GRAY_LEVELS] = {};1718 calculate_histogram(height, width, in_array, histogram);19 sum = 0;20for(int i=0; i < GRAY_LEVELS; i++){21 sum = sum + histogram[i];22 sum_of_h[i] = sum;23 }2425 constant = (double)(GRAY_LEVELS)/(double)(height*width);26for(int i = 0, k = 0; i < height; i++){27for(int j = 0; j < width; j++){28 k = in_array[i][j];29 out_array[i][j] = sum_of_h[k] * constant;30 }31 }32 }。

C语言在3D图形处理中的应用

C语言在3D图形处理中的应用

C语言在3D图形处理中的应用3D图形处理是现代计算机领域的一个重要应用方向,它广泛应用于电子游戏、影视特效、建筑设计和工业制造等领域。

C语言作为一种高效且功能强大的编程语言,被广泛应用于3D图形处理。

本文将介绍C语言在3D图形处理中的应用,并探讨其重要性和优势。

一、C语言在三维坐标系的表示三维图形的处理离不开三维坐标系的表示。

C语言提供了数据结构和算法来处理三维坐标系,并使得程序员能够方便地进行坐标系的运算和变换。

通过C语言提供的数据结构,开发人员可以轻松表示和操作三维场景中的各种物体。

二、C语言在3D模型的渲染中的应用渲染是指将3D场景中的物体绘制到屏幕上的过程。

C语言提供了强大的绘图功能,可以实现灯光效果、阴影效果、纹理贴图等,使得渲染出的图形更加逼真。

通过C语言编写的渲染算法,可以高效地处理大规模的三维场景。

三、C语言在3D图形变换中的应用图形变换是指对3D模型进行平移、旋转和缩放等操作。

C语言提供了矩阵计算和向量处理的功能,使得开发人员可以轻松实现各种图形变换。

通过矩阵计算和向量处理,可以将三维模型根据需求进行各种变换,实现动态效果和用户交互。

四、C语言在3D碰撞检测中的应用碰撞检测是指判断两个或多个三维模型是否发生碰撞的过程。

在许多实时应用中,如电子游戏和虚拟现实,快速而准确的碰撞检测是必要的。

C语言提供了高效的算法和数据结构,使得开发人员能够在实时场景中实现精确的碰撞检测。

五、C语言在3D图形优化中的应用在处理大规模三维场景时,性能优化成为一个关键问题。

C语言作为一种性能出色的编程语言,可以通过优化算法和数据结构来提升3D图形处理的效率。

通过使用合适的数据结构、优化算法和并行计算等技术,可以在3D图形处理中获得更高的性能。

六、结语C语言作为一种通用编程语言,在3D图形处理中发挥了重要作用。

它提供了丰富的算法和数据结构,使得开发人员能够优雅地实现各种图形处理操作。

通过灵活运用C语言的特性,可以创建出更加逼真、流畅的3D场景,并提供更好的用户体验。

c语言image用法

c语言image用法

c语言image用法在C语言中,image(图像)通常以像素(pixels)的形式存储,并使用数组来表示。

每个像素可以将其颜色表示为RGB(红绿蓝)值,通常使用整数或字节来表示。

在处理图像时,我们可以使用C语言来完成各种操作,例如读取、修改、保存图像,以及执行图像处理算法,比如滤波、边缘检测等等。

以下是一些常用的C库和函数,可用于处理图像:1. Simple DirectMedia Layer(SDL)库:提供了一系列函数,用于创建窗口、加载图像、显示图像等操作。

2. OpenCV(Open Source Computer Vision)库:一个广泛使用的计算机视觉库,支持图像和视频处理、特征提取、目标识别等功能。

3. CImg库:一个简单易用的C++图像处理库,提供了丰富的图像处理和分析函数。

4. fread()和fwrite()函数:可以用来读取和写入二进制图像文件,如位图(.bmp)、JPEG(.jpg)等。

下面是一个简单的示例代码,展示了如何使用C语言读取和修改图像的像素:```c#include <stdio.h>#define WIDTH 256#define HEIGHT 256typedef struct {unsigned char r, g, b;} Pixel;void modifyImage(Pixel *image, int width, int height) { for (int i = 0; i < height; i++) {for (int j = 0; j < width; j++) {//修改像素值image[i * width + j].r = 255; //设置为红色image[i * width + j].g = 0; //设置为绿色image[i * width + j].b = 0; //设置为蓝色}}}int main() {Pixel image[WIDTH * HEIGHT];//读取图像FILE *file = fopen("image.bmp", "rb");fread(image, sizeof(Pixel), WIDTH * HEIGHT, file); fclose(file);//修改图像modifyImage(image, WIDTH, HEIGHT);//保存图像FILE *outputFile = fopen("output.bmp", "wb");fwrite(image, sizeof(Pixel), WIDTH * HEIGHT, outputFile);fclose(outputFile);return 0;}```上述代码中,我们首先定义了一个Pixel结构来表示图像的像素,其中包含了r、g、b三个成员分别表示红、绿、蓝分量的值。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

• int gettext(int xl,int yl,int x2,int y2,void *buffer); int puttext(int x1,int y1,int x2,int y2,void *buffer); gettext()函数是将屏幕上指定的矩形区域内文本内容存 入buffer 指针指向的一个内存空间。内存的大小用下 式计算: 所用字节大小=行数*列数*2。其中: 行数=y2-y1+1 列数=x2-x1+1 puttext()函数则是 将gettext()函数存入内存buffer中的文字内容拷贝到屏 幕上指定的位置。 int movetext(int x1, int x2, int y2, int x3, int y3); movetext()函数将屏幕上左上角为(x1, y1),右下角为 (x2, y2)的一矩形窗口内的文本内容拷贝到左上角为(x3, y3)的新的位置。该函数的坐标也是相对于整个屏幕而 言的。
• Turbo C2.0可以定义屏幕上的一个矩形域作为 窗口,使用window()函数定义。窗口定义之后, 用有关窗口的输入输出函数就可以只在此窗口 内进行操作而不超出窗口的边界。 • window()函数的调用格式为: void window(int left, int top, int right, int bottom);该函数的原型 在conio.h 中 (关于文本窗口的所有函数其头文 件均为conio.h,后面不再说明)。 函数中形式参 数(int left, int top)是窗口左上角的坐标,(int right, int bottom)是窗口的右下角坐标,其中 (left, top)和(right, bottom) 是相对于整个屏幕 而言的。
• Turbo C 2.0规定整个屏幕的左上角坐标 为(1, 1),右下角坐标为(80, 25)。并规定 沿水平方向为 X轴,方向朝右;沿垂直 方向为 Y轴,方向朝下。若window()函 数中的坐标超过了屏幕坐标的界限,则 窗口的定义就失去了意义,也就是说定 义将不起作用,但程序编译链接时并不 出错。
• 注意: ①使用以上几种函数, 当输出超出 窗口的右边界时会自动转到下一行的开 始处继续输出。 ②当窗口内填满内容仍没有结束输 出时,窗口屏幕将会自动逐行上卷直到 输出结束为止。
• 窗口内文本的输入函数
• int getche(void); 该函数在前面已经讲过, 需要说明的是,getche()函数从键盘上获 得一个字符,在屏幕上显示的时候,如 果字符超过了窗口右边界,则会被自动 转移到下一行的开始位置。
下面再介绍一些函数: void highvideo(void); 设置显示器高亮度显示字符 void lowvideo(void); 设置显示器低亮度显示字符 void normvideo(void); 使显示器返回到程序运行前 的显示方式 int wherex(void); 这两个函数返回当前窗口下光标的 x,y坐标 int wherey(void);
• 下面这个程序使用了关于窗口大小的定义、颜色的设置等函 数,在一个屏幕上不同位置定义了7个窗口,其背景色分别使用 了7种不同的颜色。 #include #include main() { int i; textbackground(0); /* 设置屏幕背景色 */ clrscr(); /* 清除文本屏幕 */ for(i=1; i<8; i++) { window(10+i*5, 5+i, 30+i*5, 15+i); /* 定义文本窗口 */ textbackground(i); /* 定义窗口背景色 */ clrscr(); /* 清除窗口 */ } getch(); }
设置屏幕为图形模式,可用下列图形初 始化函数: void far initgraph(int far *gdriver, int far *gmode,char *path); 其中gdriver和gmode分别表示图 形驱动器和模式,path是指图形驱动程 序所在的目录路径。
• •
有时编程者并不知道所用的图形显示器适配器种类,或者需要将编写 的程序用于不同图形驱动器。 void far detectgraph(int *gdriver, *gmode); 其中gdriver和gmode的意 义与上面相同。 自动进行硬件测试后进行图形初始化#include int main() { int gdriver, gmode; detectgraph(&gdriver, &gmode); /*自动测试硬件*/ printf("the graphics driver is %d, mode is %d\n", gdriver,gmode); /*输出测试结果*/ getch(); initgraph(&gdriver, &gmode, "c:\\caic\\bgi"); /* 根据测试结果初始化图形*/ bar3d(10, 10, 130, 250, 20, 1); getch(); closegraph(); return 0; }
• 注意: (1) 对于背景只有0 到7 共八种颜色,若取 大于7 小于15的数,则代表的颜色与减 7后 的值对应的颜色相同。 (2) 用textbackground()和textcolor() 函数 设置了窗口的背景与字符颜色后,在没有用 clrscr()函数清除窗口之前,颜色不会改变, 直到 使用了函数clrscr(),整个窗口和随后输出到 窗口中的文本字符才会变成新颜色。 (3) 用textattr()函数时背景颜色应左移4位, 才能使3位背景颜色移到正确位置
• 上表中的符号常数与相应的数值等价, 二者可以互换。例如设定 兰色背景可以 使用textbackground(1), 也可以使用 textbackground(BLUE),两者没有任何 区别,只不过后者比较容易记忆,一看 就知道是兰色。
• Turbo C 另外还提供了一个函数,可以同时设置文本 的字符和背景颜色,这个函数的调用格式为: void textattr(int attr); 其中: attr的值表示颜色形式编码的信 息,每一位代表的含义如下: 位76543210 Bbbbcccc ↓ ┕┙ ┖─┘ 闪烁 背景颜色 字符颜色 字节低四位cccc设置字符颜色(0到15),4 ̄6三位 bbb设置背景颜色(0到7),第7位B设置字符是否闪烁。 假如要设置一个兰底黄字,定义方法 如下: textattr(YELLOW+(BLUE<<4));若再要求字符 闪烁,则定义变为: textattr(128+YELLOW+(BLUE<<4);

下面这个程序给上例中加入了一些文本的输出函数。 #include #include int main() { int i; char *c[]={"BLACK", "BLUE", "GREEN", "CYAN", "RED&#N", "LIGHTGRAY"}; textbackground(0); /* 设置屏幕背景色 */ clrscr(); /* 清除文本屏幕 */ for(i=1; i<8; i++) { window(10+i*5,5+i,30+i*5,15+i); /* 定义文本窗口 */ textbackground(i); /* 定义窗口背景色 */ clrscr(); /* 清除窗口 */ } getch(); return 0; }
Turbo C 提供了非常丰富的图形函数,所有图形函数的原 型均在graphics. h 中,本节主要介绍图形模式的初始化、 独立图形程序的建立、基本图形功能、图形窗口以及图 形模式下的文本输出等函数。 使用图形函数时要确保有显示器图形驱动程序*BGI,同 时将集成开发环境Options/Linker中的Graphics lib选为on, 只有这样才能保证正确使用图形函数。图形模式的初始 化不同的显示器适配器有不同的图形分辨率。即是同一 显示器适配器,在不同模式下也有不同分辨率。因此, 在屏幕作图之前,必须根据显示器适配器种类将显示器 设置成为某种图形模式,在未设置图形模式之前,微机 系统默认屏幕为文本模式(80列,25行字符模式),此时所 有图形函数均不能工作。
另外,一个屏幕可以定义多个窗口,当需要用另一窗口 时,可将定义该窗口的window() 函数再调用一次,此时 该窗口便成为现行窗口了。如要定义一个窗口左上角在 屏幕(20,5)处,大小为30列15行的窗口可写成: window(20, 5, 50, 25);
• 文本窗口颜色的设置文本窗口颜色的设 置包括背景颜色的设置和字符颜色的设 置,使用的函数及其调用格式为: 设置 背景颜色: void textbackground(int color); 设置字符颜色: void textcolor(int color); 有关颜色的定义见下表:
注意: 1. gettext()函数和puttext() 函数中的坐标是对整个屏 幕而言的, 即是屏幕的绝对坐标,而不是相对窗口的坐标。 2. movetext()函数是拷贝而不是移动窗口区域内容, 即使用该函数后, 原位置区域的文本内容仍然存在。

main() {int i; char *f[]={"Load F3","Pick Alt-F3","New ", "Save F2","Write to ","Directory", "Change dir","Os shell ","Quit Alt-X"}; char buf[11*16*2]; clrscr(); textcolor(YELLOW); textbackground(BLUE); clrscr(); gettext(10, 2, 24, 11, buf); window(10, 2, 24, 11); textbackground(RED); textcolor(YELLOW); clrscr(); for(i=0; i<9; i++) {gotoxy(1, i+1); cprintf("%s", f[i]);} getch(); movetext(10, 2, 24, 11, 40, 10); puttext(10, 2, 24, 11, buf); getch();}
相关文档
最新文档