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版本。