c语言图像编程
缺少相关的函数定义,缺少include文件,或者你书上的代码就算是错误的代码,现在的教学材料都很不负责任,呵呵,good luck!
② 怎么使用C语言完成图片中要求的编程(尽量使用一维数组)
按照你的要求,都用一维数组。不过学生信息建议使用结构体来定义。
题目要求函数参数用到数组和指针,而数组传参本来就可用数组和指针两种方式。
下面是代码:
#include <stdio.h>
#define MJ 5//课程最大数量
#define MT 30//学生最大人数
#define FM 100//满分
#define PS 60//及格
int init(int ss[],int sid[],int *p_slen);//通过初始化数组。成功返回总分,失败返回0
int contFStudents(int ss[],int sid[],int slen);//统计不及格人数并打印名单,返回人数
int contAAvg(int ss[],int sid[],int slen,float avg);//avg表示平均分数,如未知传-1 返回人数
int contMax(int ss[],int slen,int *sid);//统计最高分及学号
int main()
{
int ss[MT],sid[MT],sum;
int slen=0;// 实际输入的学生人数
int fn,an;
sum=init(ss,sid,&slen);
fn=contFStudents(ss,sid,slen);
an=contAAvg(ss,sid,slen,(sum*1.0)/slen);
printf("不及格占比%.0f%% ",(fn*1.0)/slen*100);
printf("高于等于平均分占比%.0f%% ",(an*1.0)/slen*100);
contMax(ss,slen,sid);
return 0;
}
int init(int ss[],int sid[],int *p_slen)
{
int i=0,n,sum=0;
if(!p_slen) return 0;
*p_slen=0;
printf("该班级所有学生某课程成绩(人数不超过%d): ",MT);
for(i=0;i<MT;i++)sid[i]=1000+i;//学号没有特殊要求,直接用数字代替
i=0;
while(*p_slen<=MT)
{
printf("请输入学号%d的成绩:",sid[i]),scanf("%d",&n);
if(n>FM)
{
printf("%d输入无效,不能大于满分上限%d ",n,FM);
continue;
}
if(n<0) break;
ss[i++]=n;
sum+=n;
}
*p_slen=i;
return sum;
}
int contFStudents(int ss[],int sid[],int slen)
{
int i,cnt=0;
for(i=0;i<slen;i++)
if(ss[i]<PS)cnt++,printf("学号%d,分数:%d,不及格! ",sid[i],ss[i]);
printf("不及格人数共:%d人 ",cnt);
return cnt;
}
int contAAvg(int ss[],int sid[],int slen,float avg)
{
int i,cnt=0,sum=0;
if(avg==-1)
{
for(i=0;i<slen;i++) sum+=ss[i];
avg=(sum*1.0)/slen;
}
for(i=0,printf("平均分(%f)及平均分以上的学生有: ",avg);i<slen;i++)
if(ss[i]>=avg)cnt++,printf("学号%d,分数:%d ",sid[i],ss[i]);
printf("平均分及平均分以上人数共:%d人 ",cnt);
return cnt;
}
int contMax(int ss[],int slen,int *sid)
{
int i,max=ss[0];
if(!sid) return 0;
for(i=0;i<slen;i++)
if(ss[i]>max) max=ss[i];
for(i=0,printf("最高分(%d)的学生学号有: ",max);i<slen;i++)
if(ss[i]==max) printf("%d ",sid[i]);
return 1;
}
③ c语言,简易图像编程处理
看工具是什么。甚至具体需求是什么。
GDI/DX/OPENGL都可以在像素RGB值上直接处理。
等于做离屏渲染。
也可以利用游戏引擎现有的工具库直接实现这些逗比效果。
④ C语言图像处理方法
1.图像平移
图像平移只是改变图像在屏幕上的位置,图像本身并不发生变化。
假设原图像区域左上角坐标为(x0,y0),右下角坐标为(x1,y1),将图像分别沿x和y轴平移dx和dy,则新图像的左上角坐标为(x0+dx,y0+dy),右下角坐标为(x1+dx,y1+dy)。
在屏幕上实现图像的移动分为四个步骤:
⑴保存原图像到缓冲区。
⑵擦除原图像。
⑶计算平移后的新坐标。
⑷在新的坐标位置重新显示原图像。
2.图像颠倒
图像颠倒是指把定义好的图像区域上下翻转地显示在屏幕上。分析图像颠倒的过程,可发现每行的图像信息都保持不变,而只是改变了行的顺序,将第一行与最后的第n行相互交换,第二行与第n-1行交换??,依此类推,从而实现了图像的颠倒。只需采用按行交换的方式,即可方便地修改缓冲区内容,实现图像的颠倒。
3.图像镜像变换
镜像变换是指将指定区域的图像左右翻转地显示在屏幕。分析镜像变换过程可以发现:每行图像信息的处理方式是相同的,而且行顺序不发生变化,只是每一行的像素信息按从左到右的顺序进行了左右颠倒,从而实现了镜像变换。因此,采用按行逐点变换的方式实现图像的镜像。
4.图像旋转
图像旋转是指把定义的图像绕某一点以逆时针或顺时针方向旋转一定的角度,云南电脑培训http://www.kmbdqn.cn/认为通常是指绕图像的中心以逆时针方向旋转。
⑤ C语言如何画图
framebuffer(帧缓冲)。
帧的最低数量为24(人肉眼可见)(低于24则感觉到画面不流畅)。
显卡与帧的关系:由cpu调节其数据传输速率来输出其三基色的配比。
三基色:RGB(红绿蓝)。
在没有桌面和图形文件的系统界面,可以通过C语言的编程来实现在黑色背景上画图!
用下面的代码,在需要的地方(有注释)适当修改,就能画出自己喜欢的图形!
PS:同样要编译运行后才能出效果。
#include <stdio.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <linux/fb.h>
#include <stdlib.h>
#define RGB888(r,g,b) ((r & 0xff) <<16 | (g & 0xff) << 8 | (b & 0xff))
#define 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. ");
exit(EXIT_FAILURE);
printf("xres: %d ", info.xres);
printf("yres: %d ", info.yres);
printf("bits_per_pixel: %d ", info.bits_per_pixel);
size_t len = info.xres*info.yres*info.bits_per_pixel >> 3;
unsigned long* addr = NULL;
addr = mmap(NULL, len, PROT_WRITE|PROT_READ, MAP_SHARED, fd, 0);
if(addr == (void*)-1){
perror("mmap err. ");
⑥ 检查图像文件格式 C语言编程
1.图片也是属于文件类型的一种,图片属于二进制文件。使用fopen函数的二进制模式“rb”就可以打开。
2.例程:
#include<stdlib.h>
#include<stdio.h>
intmain()
{
FILE*fpPhoto,*fpText,*fpTarget;
intiRead;
charszBuf[100];
printf("请输入第一个文件名(jpg): ");
gets(szBuf);
fpPhoto=fopen(szBuf,"rb");
printf("请输入第二个文件名(txt): ");
gets(szBuf);
fpText=fopen(szBuf,"rb");
printf("请输入目的文件名(jpg): ");
gets(szBuf);
fpTarget=fopen(szBuf,"wb");
if(!fpPhoto||!fpText||!fpTarget)
{
printf("打开文件失败! ");
system("pause");
return-1;
}
while((iRead=fread(szBuf,1,sizeof(szBuf),fpPhoto))>0)
fwrite(szBuf,1,iRead,fpTarget);
while((iRead=fread(szBuf,1,sizeof(szBuf),fpText))>0)
fwrite(szBuf,1,iRead,fpTarget);
fclose(fpPhoto);
fclose(fpText);
fclose(fpTarget);
return0;
}
⑦ C语言 图像编程问题
把代码贴出来才知道问题在哪?
#include "graphics.h"
#include "conio.h"
void main()
{
int gd=DETECT,gm;
initgraph(&gd,&gm,"");//因为我的BGI和代码放在同一个目录下所以才省略的
circle(300,220,100);//你的原始数据时,圆是很小的。我改成这样后,在屏幕的中心有一个大圆
getch();
closegraph();
}
//按道理不会一闪而过,可能是圆圈太小你没看清吧,试试我改后的代码
运行后你不要再按键盘上的字母,不然会关闭图像的
我运行过了,这在我上面是正常的?
你用是什么编译器?
是C与C++程序设计学习与实验系统 2009.7吧?
你改成和我一模一样的,把BGI拷到和代码同个目录再试
也许是你的显卡问题!
呵呵,是显卡问题就没办法啰!
⑧ 使用C语言编程画图
换账号再来回答,veket的小号。。。
.......用了ege图形库.........纯体力活.........
源代码....demo.cpp.....
/////////////////////////////////////////
// ege0.3.8
// MinGW g++3.4.2
// veket的小号
/////////////////////////////////////////
#include"graphics.h"
#include<stdio.h>
constintYLEN=50;
constintXLEN=40;
constintWIDTH=10*XLEN;
constintHEIGHT=2*YLEN;
constintXWIDTH=640;
constintYHEIGHT=480;
intmain()
{
intx1,y1,x2,y2,x,y;
charstrbuf[100];
inti;
setinitmode(0);
initgraph(XWIDTH,YHEIGHT);
setbkcolor(RGB(0xcc,0xcc,0xcc));
setfillstyle(RGB(0xff,0xff,0xff));
x2=x1=(getmaxx()-WIDTH)/2;
y1=(getmaxy()-2*HEIGHT-YLEN)/2;
y2=y1+HEIGHT+YLEN;
bar(x1,y1,x1+WIDTH,y1+2*YLEN);
setcolor(RGB(0x04,0x04,0x04));
rectangle(x1,y1,x1+WIDTH,y1+2*YLEN);
outtextxy(x1-20,y1-10,"1");
outtextxy(x1-20,y1-10+YLEN,"0");
outtextxy(x1-20,y1-10+2*YLEN,"-1");
for(x=x1,y=y1+2*YLEN+10,i=0;x<=x1+WIDTH;x+=2*XLEN,i+=2)
{
sprintf(strbuf,"%d ",i);
outtextxy(x,y,strbuf);
}
for(x=x1;x<x1+(int)(3*PI*XLEN);x++)
{
y=y1+YLEN-(int)(YLEN*sin(1.0*(x-x1)/XLEN)+0.5);
putpixel(x,y,RGB(0x3e,0x3e,0xff));
}
bar(x2,y2,x2+WIDTH,y2+2*YLEN);
rectangle(x2,y2,x2+WIDTH,y2+2*YLEN);
outtextxy(x2-20,y2-10,"1");
outtextxy(x2-20,y2-10+YLEN,"0.5");
outtextxy(x2-20,y2-10+2*YLEN,"0");
for(x=x2,y=y2+2*YLEN+10,i=0;x<=x1+WIDTH;x+=2*XLEN,i+=2)
{
sprintf(strbuf,"%d ",i);
outtextxy(x,y,strbuf);
}
for(x=x2;x<x2+(int)(PI*XLEN);x++)
{
y=y2+2*YLEN-(int)(2*YLEN*sin(1.0*(x-x1)/XLEN)+0.5);
putpixel(x,y,RGB(0x3e,0x3e,0xff));
}
for(x=x2+(int)(2*PI*XLEN);x<x2+(int)(3*PI*XLEN);x++)
{
y=y2+2*YLEN-(int)(2*YLEN*sin(1.0*(x-x1)/XLEN)+0.5);
putpixel(x,y,RGB(0x3e,0x3e,0xff));
}
getch();
closegraph();
return0;
}
⑨ 关于图像编程的问题(C语言)
1.就是d\tc目录,将路径字符串用PATH宏表示.其中一个斜杆是对另外一个斜杠的转义.
2. gdriver为显卡驱动,VGA为显示适配器类型,gmode表示显示模式(如32色,256色显示)
3. 这个函数时对关于显卡的变量经行初始化
4. 绘制一个条(相当于条形图), 两点确定一个矩形,(70,70)是一个点的坐标,(120,100)是另外一个点的坐标
⑩ c语言编程如何实现图形化
这要看你所使用的系统平台,图形化编程与系统平台息息相关
对于C语言来说,有许多成熟的框架。比如Windows上可使用Windows的系统API,Linux下有GTK,嵌入式环境下有miniGUI等。
C语言是一门比较特殊的语言,虽然也是高级编程语言的一种,但是为了和其他语言区分开来,部分人也会将C语言称作中级语言,主要是因为C语言不是面向对象的语言,并且有指针这样的利器可以直接对底层以及硬件进行操作。
正是因为C语言不是面向对象的语言,在图形化这样更偏上层的应用中,一般会使用C++替代C语言,这样能极大的降低开发的工作量。
比如,Windows下可使用MFC,WPF也支持C++。Linux下一般用跨平台的QT(可在Windows/MAC等多种平台运行)。嵌入式环境下有嵌入式的QT版本。