c繪圖代碼
『壹』 c語言繪圖
試驗發現還可以呀。
如果你的圖形很復雜,可以考慮用函數getimage()和putimage();先用getimage()把一定的圖形讀入內存保存起來,然後在需要的時候再調用putimage()顯示出來。這樣畫面動畫就顯得比較平滑。
你可以查這兩個函數,也可以在網上找到使用它們的實例,對於處理比較復雜實時性要求較高的動畫程序這個是比較有效的。
『貳』 求解C語言繪圖,解釋以下代碼
註解寫得那麼詳細,請問哪裡不懂了。。
『叄』 c語言繪圖代碼
看下這背景可以吧
『肆』 C語言畫圖 程序解析
你這是C++的代碼,而抄且用的是Win32的代碼,裡面會有很多窗體函數API,你只復制了一部分,簡單的來說,C++里,話圖是用的類,
CPaintDC dc(this); 建立了一個CPaintDC對象dc,然後通過操作這個對象來完成一些圖案,就是下面的dc.MoveTo( 20, 20);
dc.LineTo( 20,420);
dc.MoveTo( 20,420);
dc.LineTo(820,420);
dc.MoveTo( 20,420);
dc.LineTo(820, 20);
上面是連線,
dc.Ellipse(x-1+20, 420-y-1, x+1+20, 420-y+1);
這是畫橢圓,
你這段代碼是復制了一部分,而CPaintDC對象屬於誰,應該在頭文件里,具體信息,可以查C++類庫大全
『伍』 使用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語言實現畫圖功能
tc/bc在dos下自帶圖形驅動,可以使用graphics.h 頭文件調用標准C函數,如果堅決不用,請使用系統功能調用,自己編寫繪圖功能,DOS下使用int86()函數實現功能調用。有,你可以參考:
支持SVGA的高解析度繪圖通過調用中斷 10h的4f功能來實現
主要解析度設置代碼
unsigned char set_SVGA_mode(int vmode)
{union REGS r;
r.x.ax=0x4f02;
r.x.bx=vmode;
int86(0x10,&r,&r);
return(r.h.ah);
}
void hide_text_cursor(void)
{union REGS r;
r.h.ah=1;
r.h.ch=32;
int86(0x10,&r,&r);
}
void selectpage(register char page)
{union REGS r;
r.x.ax=0x4f05;
r.x.bx=0;
r.x.dx=page;
int86(0x10,&r,&r);
}
void show_text_cursor(char size)
{union REGS r;
r.h.ah=1;
r.h.cl=size;
r.h.ch=7;
int86(0x10,&r,&r);
}
unsigned int get_SVGA_mode()
{union REGS r;
r.x.ax=0x4f03;
int86(0x10,&r,&r);
return(r.x.bx);
}
windows下本來就是圖形界面,隨便可以畫,有關的概念是:Canvas,brush,color等類/參數,DrawLine/DrawArc函數/方法。
『柒』 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語言繪圖
cleardevice清除的不僅僅是當前的頁吧
將你的cleardevice();
改為clearviewport();
經測試絕無閃爍
『玖』 C語言繪圖程序
最簡單的是使用GDI畫圖~
『拾』 求一份用C語言繪圖的程序
Turbo C提供了圖形函數的,所有圖形函數均在graphics.h中。在編程之前你要把Options/Linker中的Graphics lib選為on,只有這樣才能保證正確使用圖形函數。
給你一個我以前做實驗畫「22」的例子吧
#include<graphics.h> 頭文件一定要有
int x0,y0,nflag[90][70];
void Writechar(int nflag[90][70])
{
int i,j;
for(i=0;i<90;i++)
{
for(j=0;j<70;j++)
if(nflag[i][j]==1)
putpixel(i,j,1);
else
putpixel(i,j,2);
}
}
void Setchar(int nflag[90][70])
{
int i,j;
for(i=0;i<90;i++)
for(j=0;j<70;j++)
nflag[i][j]=0;
for(i=0;i<90;i++)
for(j=0;j<70;j++)
{ //fist"2"
if((j>6&&j<13)&&(i>8&&i<35))
{
nflag[i][j]=1;
}
if((j>6&&j<33)&&(i>28&&i<35))
{
nflag[i][j]=1;
}
if((j>26&&j<33)&&(i>8&&i<35))
{
nflag[i][j]=1;
}
if((j>26&&j<53)&&(i>8&&i<15))
{
nflag[i][j]=1;
}
if((j>46&&j<53)&&(i>8&&i<35))
{
nflag[i][j]=1;
}
//second "2"
if((j>6&&j<13)&&(i>44&&i<71))
{
nflag[i][j]=1;
}
if((j>6&&j<33)&&(i>64&&i<71))
{
nflag[i][j]=1;
}
if((j>26&&j<33)&&(i>44&&i<71))
{
nflag[i][j]=1;
}
if((j>26&&j<53)&&(i>44&&i<51))
{
nflag[i][j]=1;
}
if((j>46&&j<53)&&(i>44&&i<71))
{
nflag[i][j]=1;
}
}
}
int main()
{
int gdriver=DETECT,gmode;
initgraph(&gdriver,&gmode,"c:\\tc3\\bgi"); 這里的路徑自己改
Setchar(&nflag);
Writechar(&nflag);
getch();
closegraph();
return 0;
}
與我這個程序大致一樣 你只要設計好你的圖的演算法就行了
不懂得函數你可以網路一下就知道了
好了 為了給你解答我把N久不用的資料都翻出來看了 呵呵