c语言的图形函数库有哪些

c语言的图形函数库有哪些,第1张

图形和图像函数包含在graphicsh里面(一) 像素函数56 putpiel() 画像素点函数57 getpixel()返回像素色函数(二) 直线和线型函数58 line() 画线函数59 lineto() 画线函数60 linerel() 相对画线函数61 setlinestyle() 设置线型函数62 getlinesettings() 获取线型设置函数63 setwritemode() 设置画线模式函数(三)、多边形函数64 rectangle() 画矩形函数65 bar() 画条函数66 bar3d() 画条块函数67 drawpoly() 画多边形函数(四)、 圆、弧和曲线函数68 getaspectratio()获取纵横比函数69 circle()画圆函数70 arc() 画圆弧函数71 ellipse()画椭圆弧函数72 fillellipse() 画椭圆区函数73 pieslice() 画扇区函数74 sector() 画椭圆扇区函数75 getarccoords()获取圆弧坐标函数(五)、 填充函数76 setfillstyle() 设置填充图样和颜色函数77 setfillpattern() 设置用户图样函数78 floodfill() 填充闭域函数79 fillpoly() 填充多边形函数80 getfillsettings() 获取填充设置函数81 getfillpattern() 获取用户图样设置函数(六)、图像函数82 imagesize() 图像存储大小函数83 getimage() 保存图像函数84 putimage() 输出图像函数四、图形和图像函数对许多图形应用程序,直线和曲线是非常有用的。但对有些图形只能靠 *** 作单个像素才能画出。当然如果没有画像素的功能,就无法 *** 作直线和曲线的函数。而且通过大规模使用像素功能,整个图形就可以保存、写、擦除和与屏幕上的原有图形进行叠加。(一) 像素函数56 putpixel() 画像素点函数功能: 函数putpixel() 在图形模式下屏幕上画一个像素点。用法: 函数调用方式为void putpixel(int x,int y,int color);说明: 参数x,y为像素点的坐标,color是该像素点的颜色,它可以是颜色符号名,也可以是整型色彩值。此函数相应的头文件是graphicsh返回值: 无例: 在屏幕上(6,8)处画一个红色像素点:putpixel(6,8,RED);57 getpixel()返回像素色函数功能: 函数getpixel()返回像素点颜色值。用法: 该函数调用方式为int getpixel(int x,int y);说明: 参数x,y为像素点坐标。函数的返回值可以不反映实际彩色值,这取决于调色板的设置情况(参见setpalette()函数)。这个函数相应的头文件为graphicsh返回值: 返回一个像素点色彩值。例: 把屏幕上(8,6)点的像素颜色值赋给变量color。color=getpixel(8,6);

1、可以变成灰度图也可以不变。这里假设你的图像都是IPL_DEPTH_8U类型。

2、如果变成灰度图,就是单通道图像,获取的就是每一个像素点的灰度值。

IplImage img = cvLoadImage("testbmp", 0);

for (int i = 0; i < img->height; i++)

{

for (int j = 0; j < img->width; j++)

{

//方法一:使用cvGet2D()函数间接访问

CvScalar s = cvGet2D(img, i, j); //其中i代表y轴(第i行),即height;j代表x轴(第j列),即width。

printf("gray value=%f\n",sval[0]);

//方法二:使用直接访问

uchar val = ((uchar )(img->imageData + iimg->widthStep))[j]; //i和j的意义同上

printf("gray value=%d\n",val);

}

}

3、如果不变成灰度图,就是3通道图像,获取的就是每一个像素点的BGR值,然后分别获取B值,G值和R值。

IplImage img = cvLoadImage("testbmp", 1);

for (int i = 0; i < img->height; i++)

{

for (int j = 0; j < img->width; j++)

{

//方法一:使用cvGet2D()函数间接访问

CvScalar s=cvGet2D(img,i,j); //其中i代表y轴(第i行),即height;j代表x轴(第j列),即width。

printf("B=%f, G=%f, R=%f\n",sval[0],sval[1],sval[2]); //注意是BGR顺序

//方法二:使用直接访问

int bVal = ((uchar )(img->imageData + iimg->widthStep))[jimg->nChannels + 0]; // B

int gVal = ((uchar )(img->imageData + iimg->widthStep))[jimg->nChannels + 1]; // G

int rVal = ((uchar )(img->imageData + iimg->widthStep))[jimg->nChannels + 2]; // R

printf("B=%d, G=%d, R=%d\n",bVal,gVal,rVal); //注意是BGR顺序

}

}

使用opencv的库吧,安装很简单,处理图像的功能很强大

#include "cvh"

#include "highguih"

int main( int argc, char argv )

{

IplImage pImg; //声明IplImage指针

//载入图像

if( argc == 2 &&

(pImg = cvLoadImage(“XXXbmp”, 1)) != 0 )//这里bmp要放到工程文件夹下,否则写绝对路径,取像素值请用:pImgptr<Vec3b>(i)[j]

{

cvNamedWindow( "Image", 1 );//创建窗口

cvShowImage( "Image", pImg );//显示图像

cvWaitKey(0); //等待按键

cvDestroyWindow( "Image" );//销毁窗口

cvReleaseImage( &pImg ); //释放图像

return 0;

}

return -1;

}

可以使用C语言标准函数库中的fopen、fseek、fclose等系列函数来打开bmp位图文件,以及进行相应的处理,下面是一个demo,仅供参考。以下代码在vc60中编译通过。

#include <stdioh>

#include <stdlibh>

#define BITMAPFILEHEADERLENGTH 14   // The bmp FileHeader length is 14

#define BM 19778                    // The ASCII code for BM

/ Test the file is bmp file or not /

void bmpFileTest(FILE fpbmp);

/ To get the OffSet of header to data part /

void bmpHeaderPartLength(FILE fpbmp);

/ To get the width and height of the bmp file /

void BmpWidthHeight(FILE fpbmp);

//get r,g,b data

void bmpDataPart(FILE fpbmp);

// output data to corresponding txt file

void bmpoutput(FILE fpout);

unsigned int OffSet = 0;    // OffSet from Header part to Data Part

long width ;          // The Width of the Data Part

long height ;         // The Height of the Data Part

unsigned char r[2000][2000],output_r[2000][2000];

unsigned char g[2000][2000],output_g[2000][2000];

unsigned char b[2000][2000],output_b[2000][2000];

int main(int argc, char argv[])

{

     / Open bmp file /

unsigned char fp_temp;

     FILE fpbmp;

     FILE fpout;

     fpbmp= fopen("1bmp", "rb");

     if (fpbmp == NULL)

     {

 printf("Open bmp failed!!!\n");

 return 1;

     }

     fpout= fopen("outbmp", "wb+");

     if (fpout == NULL)

     {

 printf("Open outbmp failed!!!\n");

 return 1;

     }

     

     bmpFileTest(fpbmp);                //Test the file is bmp file or not

     bmpHeaderPartLength(fpbmp);        //Get the length of Header Part

     BmpWidthHeight(fpbmp);             //Get the width and width of the Data Part

     

     

//

fseek(fpbmp, 0L, SEEK_SET);

fseek(fpout, 0L, SEEK_SET);

 

fp_temp=(unsigned char )malloc(OffSet);

         fread(fp_temp, 1, OffSet, fpbmp);

fwrite(fp_temp,1,OffSet,fpout);

     

bmpDataPart(fpbmp);                //Reserve the data to file 

     

/

 

 

 如果您想对进行处理,请您再这里插入处理函数!!!!!!!!!!!!!!!!!!

 

/

bmpoutput(fpout);

fclose(fpbmp);

fclose(fpout);

         return 0;

}

void bmpoutput(FILE fpout)

{

         int i, j=0;

         int stride;

unsigned char pixout=NULL;

   

stride=(24width+31)/8;

stride=stride/44;

pixout=(unsigned char )malloc(stride);

 

fseek(fpout, OffSet, SEEK_SET);

for(j=0;j<height;j++)

{

   for(i=0;i<width;i++)

        {

            pixout[i3+2]=output_r[height-1-j][i];

            pixout[i3+1]=output_g[height-1-j][i];

            pixout[i3]  =output_b[height-1-j][i];

        }

fwrite(pixout, 1, stride, fpout);

}

}

void bmpDataPart(FILE fpbmp)

{

         int i, j=0;

int stride;

unsigned char pix=NULL;

FILE fpr;

         FILE fpg;

FILE fpb;

     

     if((fpr=fopen("bmprtxt","w+")) == NULL)

     {

    printf("Failed to construct file bmprtxt!!!");

exit(1);

     }

     if((fpg=fopen("bmpgtxt","w+")) == NULL)

     {

 printf("Failed to construct file bmpgtxt!!!");

 exit(1);

     }

if((fpb=fopen("bmpbtxt","w+")) == NULL)

     {

printf("Failed to construct file bmpbtxt!!!");

exit(1);

     }

 

     fseek(fpbmp, OffSet, SEEK_SET);

stride=(24width+31)/8;

stride=stride/44;

pix=(unsigned char )malloc(stride);

 

for(j=0;j<height;j++)

{

fread(pix, 1, stride, fpbmp);

   for(i=0;i<width;i++)

        {

            r[height-1-j][i]   =pix[i3+2];

            g[height-1-j][i]   =pix[i3+1];

            b[height-1-j][i]   =pix[i3];

output_r[height-1-j][i]   =pix[i3+2];

            output_g[height-1-j][i]   =pix[i3+1];

            output_b[height-1-j][i]   =pix[i3];

        }

}

 for(i =0; i < height; i++)

     {

for(j = 0; j < width-1; j++)

{   

fprintf(fpb,"%4d",b[i][j]);

fprintf(fpg,"%4d",g[i][j]);

fprintf(fpr,"%4d",r[i][j]);

}

fprintf(fpb,"%4d\n",b[i][j]);

fprintf(fpg,"%4d\n",g[i][j]);

fprintf(fpr,"%4d\n",r[i][j]);

 }

  

fclose(fpr);

fclose(fpg);

fclose(fpb);

 

}

void bmpFileTest(FILE fpbmp)

{     

     unsigned short bfType = 0;

 

     fseek(fpbmp, 0L, SEEK_SET);//seek_set 起始位置

     fread(&bfType, sizeof(char), 2, fpbmp);

     if (BM != bfType)

     {

 printf("This file is not bmp file!!!\n");

 exit(1);

     }

}

/ To get the OffSet of header to data part /

void bmpHeaderPartLength(FILE fpbmp)

{

     fseek(fpbmp, 10L, SEEK_SET);

     fread(&OffSet, sizeof(char), 4, fpbmp);  

     printf("The Header Part is of length %d\n", OffSet);

}

/ To get the width and height of the bmp file /

void BmpWidthHeight(FILE fpbmp)

{

     fseek(fpbmp, 18L, SEEK_SET);

     fread(&width, sizeof(char), 4, fpbmp);

     fseek(fpbmp, 22L, SEEK_SET);

     fread(&height, sizeof(char), 4, fpbmp);

     printf("The Width of the bmp file is %ld\n", width);

     printf("The Height of the bmp file is %ld\n", height);

}

#include <stdioh>

#include <windowsh>

int main()

{

//变量

char title[255];//用于存放控制台窗口标题

HWND hwnd;//窗口的句柄,H:Handle

HDC hdc, hmemdc;//设备上下文句柄,DC:driver context

HBITMAP hbm;//的句柄

BITMAP bm;//结构体

RECT rect;//矩形 rectangle

//把控制台窗口调成100字符宽度,40行

system("mode con cols=100 lines=40");

//1取得窗口的句柄

GetConsoleTitleA(title, 255);//获取控制台窗口的标题

hwnd = FindWindowA(NULL, title);//通过窗口标题取得该窗口的句柄

//获取窗口的高度和宽度

GetWindowRect(hwnd, &rect);

//2 获取画笔

hdc = GetDC(hwnd);

/ if(!hdc)

printf("No val\n");

else

printf("have\n");

TextOutA(hdc, 300, 400, "Hello world", strlen("Hello world"));/

hmemdc = CreateCompatibleDC(hdc);//创建一个兼容的DC

//3加载

hbm = (HBITMAP)LoadImageA(NULL, "123bmp", IMAGE_BITMAP, 0, 0,

LR_LOADFROMFILE);

GetObject(hbm, sizeof(BITMAP), &bm);//得到信息

//4把放入兼容DC中

SelectObject(hmemdc, hbm);

//5在窗口上画出

BitBlt(hdc, 0, 0, bmbmWidth, bmbmHeight, hmemdc, 0, 0, SRCCOPY);

DeleteObject(hbm);

DeleteObject(hmemdc);

ReleaseDC(hwnd, hdc);

return 0;

}

1

黑白BMP文件图的像素大多是从62字节(从0数起)开始。具体从哪一字节开始,

决定于文件中第10字节(从0数起)开始处4字节的整形数是多少

因为文件头后面不是紧接着像素值

2

黑白BMP图的一个像素用一个bit表示。一般0表示背景(缺省为白色),1表示前景色(缺省为黑色)。即一个字节代表相邻的8个像素。

3

320240的黑白BMP图,每行320个像素用40个字节表示,240行,应占40240=9600字节。加上前头62字节,文件大小应为9662字节。

4

BMP图像素的存储顺序是自底向上。所以文件最后40个字节表示的是第一行的像素值。

5

行宽如不是8的倍数,也扩展到8的倍数。如行宽321,

则每行像素需用41个字节存储。你的行宽320,恰好是8的倍数,没有这个问题。

以上就是关于c语言的图形函数库有哪些全部的内容,包括:c语言的图形函数库有哪些、如何利用c语言实现像素图形的输出、如何在c语言 读取BMP图片的信息等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9730445.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存