图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;
}
最后更新于 2023-10-09 05:29:25 并被添加「」标签,已有 位童鞋阅读过。
本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处
相关文章