图c语言实现

帧缓冲区(帧缓冲区)。

最小帧数24(肉眼可见)(24以下,画面不流畅)。

显卡与帧的关系:cpu调整其数据传输速率,输出其三原色的比例。

三原色:RGB(红绿蓝)。

在没有桌面和图形文件的系统界面中,用C语言编程可以在黑色背景上绘图!

使用下面的代码,在需要的地方修改一下(带注释),就可以画出自己喜欢的图形了!

PS:还需要编译运行才能产生效果。

#包含stdio.h

#include sys/mman.h

#包含fcntl.h

#包含linux/fb.h

#包含stdlib.h

#定义RGB888(r,g,b)((r 0x ff)16 |(g 0x ff)8 |(b 0x ff))

#定义RGB565(r,g,b)((r 0x1f)11 |(g 0x3f)5 |(b 0x1f))

int main()

{

int fd = open("/dev/fb0 ",O _ RDWR);

if(fd 0){

perror("open err。\ n ");

退出(EXIT _ FAILURE);

printf("xres: %d\n ",info . xres);

printf("yres: %d\n ",info . yres);

printf("每像素位数:%d\n ",info . bits _ per _ pixel);

size _ t len = info . xres * info . yres * info . bits _ per _ pixel 3;

无符号long * addr = NULL

addr = mmap(NULL,len,PROT_WRITE|PROT_READ,MAP_SHARED,fd,0);

if(addr == (void*)-1){

perror("mmap err。\ n ");

如何用C语言显示一张jpg图片? 您可以使用函数OleLoadPicture从包含图像数据的流中加载图像。

具体实现代码如下:

//在显示图像之前,必须先获取图像文件的存储路径。这里,标准的文件打开对话框用于选择图像文件,文件名存储在CString变量m_sPath:

CFileDialog dlg(TRUE," jpg "," *。jpg”,

OFN _ hide readonly | OFN _ overwrite prompt

“JPEG文件(*。jpg)|*。jpg|GIF文件(*。gif)|*。gif|| ",NULL);

如果(dlg。DoModal()==IDOK)

{

m_sPath=dlg。get pathname();

invalidate();

}

//为了简单起见,图形显示的代码直接用OnDraw写在visual类中。首先打开文件并判断文件的可用性,将文件内容放入流接口IStream的对象pStm中:

IStream * pStm

CFileStatus fstatus

CFile文件;

长CB;

……

如果(文件。打开(m_Path,CFile::modeRead)文件。GetStatus(m_Path,fstatus) ((cb = fstatus.m_size)!= -1))

{

h global h global = global alloc(GMEM _可移动,CB);

LPVOID pvData = NULL

如果(hGlobal!=空)

{

if ((pvData = GlobalLock(hGlobal))!=空)

{

文件。ReadHuge(pvData,CB);

global unlock(h global);

createstreamongglobal(h global,TRUE,pStm);

}

}

}

//然后,直接调用OleLoadPicture函数从流中加载图像:

IPicture * pPic

……

OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID *)pPic));

//因为这个函数有时会导致失败,所以你要使用SUCCEEDED宏做一些适当的保护工作,下面的图像显示工作只有在数据加载成功的前提下才能继续:

if(成功(OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID*)pPic)))

{

OLE _ XSIZE _ HIMETRIC hmWidth

OLE _ YSIZE _ HIMETRIC hmHeight

pPic-> get _ Width(hm Width);

pPic-> get _ Height(hm Height);

double fX,fY;

……

fX =(double)pDC-> GetDeviceCaps(HORZRES)*(double)hm width/((double)pDC-> GetDeviceCaps(HORZSIZE)* 100.0);

fY =(double)pDC-> GetDeviceCaps(VERTRES)*(double)hm height/((double)pDC-> GetDeviceCaps(VERTSIZE)* 100.0);

if(FAILED(pPic->Render(*pDC,0,0,(DWORD)fX,(DWORD)fY,0,hmHeight,hmWidth,-hmHeight,NULL)))

AfxMessageBox("渲染图像失败!");

pPic-> Release();

}

其他

AfxMessageBox("从流中加载图像失败!");

//其中,显示工作主要由IPicture接口对象的Render函数完成,主要用于将图片的指定部分绘制到指定设备环境的指定位置。

原型如下:

HRESULT Render( HDC hdc,//用于呈现图像的设备环境句柄。

长x,hdc上的横坐标。

长y,hdc上的纵坐标。

长cx,//图像宽度

Longchy,//图像高度

OLE_XPOS_HIMETRIC xSrc,//源图像上的水平偏移量。

Ole _ ypos _ himetricsrc,//源图像上的垂直偏移量

OLE_XSIZE_HIMETRIC cxSrc,//源图像上的水平副本数。

Ole _ ysize _ himetricsrc,//源图像上的垂直副本数。

lprectprcwbounds//指向目标原语设备的环境句柄的指针);

C语言程序图的创建和遍历 C语言程序设计中图的创建和遍历:

# includestdio.h

#定义N 20

#定义正确1

#定义假0

int visited[N];

Typedef struct /*队列的定义*/

{

int data[N];

int前,后;

}排队;

typedef结构/*图的邻接矩阵*/

{

int vexnum,arcnum

char vexs[N];

int arcs[N][N];

}

图形;

void createGraph(graph * g);/*建立无向图邻接矩阵*/

void dfs(int i,graph * g);/*从第I个顶点开始深度优先搜索*/

无效tdfs(图形* g);/*深度优先搜索全图*/

void bfs(int k,graph * g);/*从第k个顶点开始宽度优先搜索*/

无效tbfs(图形* g);/*广度优先搜索全图*/

void init_visit()。/*初始化访问标识数组*/

Void createGraph(graph *g) /*建立无向图的邻接矩阵*/

{ int i,j;

char v;

g-vex num = 0;

g-arcnum = 0;

I = 0;

Printf("输入顶点序列(以#)结尾):

");

while((v=getchar())!='#')

{

g-vexs[I]= v;/*读入顶点信息*/

我;

}

g-vex num = I;/*顶点数*/

for(I = 0;ig-vexnum;I) /*邻接矩阵初始化*/

for(j = 0;jg-vexnum;j)

g-arcs[I][j]= 0;

Printf("在侧面输入信息:

");

scanf("%d,%d ",I,j);/*读入边缘I,j*/

而(我!=-1) /*读入I,j为-1时结束*/

{

g-arcs[I][j]= 1;

g-arcs[j][I]= 1;

scanf("%d,%d ",I,j);

}

}

Voidfs (int I,graph * g)/*深度优先从第I个顶点开始搜索*/

{

int j;

printf("%c ",g-vexs[I]);

visited[I]= TRUE;

for(j = 0;jg-vexnum;j)

if((g-arcs[i][j]==1)(!已访问[j]))

dfs(j,g);

}

Void tdfs(graph *g) /* Depth首先搜索整个图形*/

{

int I;

printf("

从顶点%C:",g-vexs[0])开始的深度优先搜索序列;

for(I = 0;ig-vexnum;我)

如果(访问过[我]!=真)

dfs(i,g);

}

Void bfs(int k,graph *g) /*从第k个顶点开始宽度优先搜索*/

{

int i,j;

队列qlist,* q;

q = qlist

q-后方= 0;

q-front = 0;

printf("%c ",g-vexs[k]);

visited[k]= TRUE;

q-data[q-rear]= k;

q-后方=(q-后方1)% N;

而(q-后方!=q-front)

{

I = q-data[q-front];

q-front =(q-front 1)% N;

for(j = 0;jg-vexnum;j)

if((g-arcs[i][j]==1)(!已访问[j]))

{

printf("%c ",g-vexs[j]);

visited[j]= TRUE;

q-data[q-rear]= j;

q-后方=(q-后方1)% N;

}

}

}

Void tbfs(图*g) /*广度优先搜索整个图*/

{

int I;

printf("

从顶点%C:",g-vexs[0])开始的广度优先搜索序列;

for(I = 0;ig-vexnum;我)

如果(访问过[我]!=真)

bfs(i,g);

printf("

");

}

Void init_visit() /*初始化访问标识数组*/

{

int I;

for(I = 0;在;我)

visited[I]= FALSE;

}

int main()

{

图ga;

int i,j;

创建图表;

Printf("无向图的邻接矩阵:

");

for(I = 0;iga.vexnum我)

{

for(j = 0;jga.vexnumj)

printf("= ",ga . arcs[I][j]);

printf("

");

}

init _ visit();

tdfs(ga);

init _ visit();

tbfs(ga);

返回0;

}

C语言编程,顾名思义,就是用C语言进行计算机编程。

c语言是世界上广泛流行的、很有前途的高级计算机语言。它适合作为系统描述语言,既可以用来编写系统软件,也可以用来编写应用软件。

c语言是一种被广泛引用的灵活的计算机编程语言。用C语言编写的程序可以运行在多种平台上,具有很强的可移植性。具体C编程内容请参加C或C。

图(c语言) 我会做的。等等。

/*编写无向图的邻接矩阵类AdjMWGraph,实现无向图的广度遍历和深度遍历。

其中图中顶点数据类型是字符。输入图第一行中的顶点数n(4=n=26)

第二行是图m的边数(3=m=351),第三行是顶点信息(都是大写字母)。

下面的输入数据附加到一条边的两个顶点上,输入的信息集与边的数量一样多。

注意:根节点都是a;并且给定的字符是连续的,也就是说a b c d。

输出广度优先搜索序列。深度优先搜索序列。

样本值输入

英语单词

一个B

一个C

B D

英国工程学院

成本加运费

C G

抽样输出

英语单词

英国皇家航空公司

*/

# include stdio . h # include stdlib . h

无符号字符arr map[26][26]= { 0 };

int nV = 0;

void deep _ prior _ scan(int j);

void spread _ prior _ scan(int j);

void GetResult()

{

int nL = 0;//存储边的数量

int I;

char arrV[26]= { 0 };

char temp,pairV[2];

//输入过程

printf(" \ n请输入顶点数:");

scanf("%d ",nV);

printf(" \ n请输入边数:");

scanf("%d ",nL);

printf(" \ n请依次输入顶点:\ n ");

for (i = 0,temp = ' A我nV;)

{

temp = getchar();

if (temp = 'A' temp = 'Z ')

{

arrV[I]= temp;

}

}

printf(" \ n请依次输入边缘:\ n ");

for(I = 0;I nL * 2;)

{

temp = getchar();

if (temp = 'A' temp = 'Z ')

{

pairV[I % 2]= temp;

if (i%2 == 1)

{

arr map[pairV[0]-' A '][pairV[1]-' A ']= 1;

}

我;

}

}

//printf("\n广度优先遍历:\ n ");

//spread _ prior _ scan(0);

//printf(" \ n ");

printf(" \ n第一次遍历:\ n ");

deep _ prior _ scan(0);

printf(" \ n ");

}

int main()

{

GetResult();

系统(“暂停”);

返回0;

}

void deep_prior_scan(int j)

{

int I;

printf("%c ",j ' A ');

for(I = 0;我nV;我)

{

if (arrMap[j][i]!= 0)

{

arr map[j][I]= 0;

深度_先验_扫描(一);

}

}

}

void spread_prior_scan(int j)

{

int I;

如果(j == 0)

{

printf(" \ nA ");

}

如果(j = 26)

{

printf("\nj=%d\n ",j);

}

for(I = 0;我nV;我)

{

if (arrMap[j][i]!= 0)

{

printf("%c ",I ' A ');

}

}

for(I = 0;我nV;我)

{

if (arrMap[j][i]!= 0)

{

arr map[j][I]= 0;

spread _ prior _ scan(I);

}

}

}

因为懒得复制数组,所以两个遍历方法要分开运行。通过打开和关闭相应函数上的注释,可以得到两次结果。

如何用C语言读图 #包括

使用命名空间std

#定义二对一(I,j,w) i*w j

void create image(unsigned char * img,int w,int h)

{ img = new unsigned char[w * h];}

void delateimage(无符号字符*img)

{ delete[]img;}

void readimage(无符号char*img,int w,int h,char *fname)

{

FILE * fp

fopen_s(fp,fname,“Rb”);

if(FP = = NULL){ cout " error " endl;返回;}

size_t结果;

result=fread(img,sizeof(无符号字符),w*h,FP);

如果(结果!=宽*高)

{

cout“读取错误”endl

返回;

}

其他

cout“阅读Ok!”endl

fclose(FP);

}

void mobanjuanji(unsigned char image,unsigned char*image1,int w,int h,float moban[5][5])

{

for(int I = 0;I for(int j = 0;j if (iw - 3 || jh - 3)

image1[Twoto1(i,j,w)]= 0;

其他

{

浮点温度= 0;

for(int m = 0;M5;m)

for(int n = 0;n5;n)

{

temp = (image[Twoto1(i-2 m,j-2 n,w)]moban[m][n]);

}

if (temp255) image1[Twoto1(i,j,w)]= 255;

else if (temp0) image1[Twoto1(i,j,w)]= 0;

else image1[Twoto1(i,j,w)]= temp;

}

}

void saveimage(无符号char *img,int w,int h,char *fname)

{

FILE * fp

fopen_s(fp,fname,“WB”);

if(FP = = NULL){ cout " error " endl;返回;}

size_t结果;

result = fwrite(img,sizeof(无符号字符),w*h,FP);

如果(结果!=宽*高)

{

cout“写错误”endl

返回;

}

其他

cout“写Ok!”endl

fclose(FP);

}

void main()

{

无符号char * img

无符号char * img1

float moban[5][5] = { {0,0,0,0,0},{0,-1,0,1,0 },{0,-2,0,2,0 },{ 0,-1,0,1,0 },{ 0,0,0,0,0 } };

//float moban[5][5]= { 0 };

int w = 512,h = 512

createimage(img,w,h);

createimage(img1,w,h);

readimage(img,w,h," E:\ ss . raw ");

mobanjuanji(img,img1,w,h,moban);

saveimage(img,w,h," E:\ ss _ 1 . raw ");

saveimage(img1,w,h," E:\ ss _ 2 . raw ");

delateimage(img);

delate image(img 1);

}

扩展数据

c语言实现读写一张图。

#包含stdlib.h

#包含windows.h

Int file_size(char* filename)//用filename获取文件大小。

{

FILE *fp = fopen(文件名,“Rb”);//打开文件。

int大小;

If(fp == NULL) //无法打开文件。

return-1;

fseek(fp,0,SEEK _ END);//将文件指针定位到文件的末尾。

size = ftell(FP);//获取文件指针偏移量,即文件大小。

fclose(FP);//关闭文件。

返回大小;

}

int main()

{

int size = 0;

size = file _ size(" qw ");

printf("%d\n ",size);

FILE * pFile,* qw

char * buffer =(char *)malloc(sizeof(char)* size);

qw =fopen("qw "," r ");

pFile = fopen ( "qwe "," WB ");

printf("%d==\n ",pFile);

printf("%d\n ",size);

fread(buffer,1,size,qw);

fwrite (buffer,sizeof(byte),size,pFile);

fclose(pFile);

重命名(" qwe "," groot . jpg ");

返回0;

}

相关文章

发表新评论