C语言画图__并保存我画的图片

作者&投稿:贸度 (若有异议请与网页底部的电邮联系)
C语言用绘图函数画一个图然后保存到文件~

不知道

framebuffer(帧缓冲)。帧的最低数量为24(人肉眼可见)(低于24则感觉到画面不流畅)。显卡与帧的关系:由cpu调节其数据传输速率来输出其三基色的配比。三基色:RGB(红绿蓝)。
在没有桌面和图形文件的系统界面,可以通过C语言的编程来实现在黑色背景上画图!
用下面的代码,在需要的地方(有注释)适当修改,就能画出自己喜欢的图形!
PS:同样要编译运行后才能出效果。
#include
#include
#include
#include
#include
#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.
");

加些分上去,我把代码贴上来。
/* HELLO.C -- Hello, world */

#include <graphics.h>

#include <stdio.h>
void save_pic(char *fn,int maxx,int maxy){
typedef long LONG;
typedef unsigned char BYTE;
typedef unsigned long DWORD;
typedef unsigned short WORD;

typedef struct tagBITMAPFILEHEADER {

WORD bfType;

DWORD bfSize;

WORD bfReserved1;

WORD bfReserved2;

DWORD bfOffBits;

} BITMAPFILEHEADER;

typedef struct tagBITMAPINFOHEADER{

DWORD biSize;

LONG biWidth;

LONG biHeight;

WORD biPlanes;

WORD biBitCount;

DWORD biCompression;

DWORD biSizeImage;

LONG biXPelsPerMeter;

LONG biYPelsPerMeter;

DWORD biClrUsed;

DWORD biClrImportant;

} BITMAPINFOHEADER;

int i,j;

FILE *fp;

BITMAPFILEHEADER bfh;
BITMAPINFOHEADER bif;
int color[16]={0,4,2,6,1,5,3,7,8,12,10,14,9,13,11,15};

unsigned char rgb[64]={0,0,0,0,0,0,128,0,0,128,0,0,0,128,128,0
,128,0,0,0,128,0,128,0,128,128,0,0,128,128,128,0
,192,192,192,0,0,0,225,0,0,255,0,0,0,255,255,0
,255,0,0,0,255,0,255,0,255,255,0,0,255,255,255,0};

union
{
unsigned char value;
struct
{
unsigned c1:4;
unsigned c2:4;

}color;
}mycolor;

bfh.bfType=0x4d42;
bfh.bfSize=153718;
bfh.bfReserved1=0;
bfh.bfReserved2=0;
bfh.bfOffBits=118;

bif.biSize=40;
bif.biWidth=640;
bif.biHeight=480;
bif.biPlanes=1;
bif.biBitCount=4;
bif.biCompression=0;
bif.biSizeImage=0;
bif.biXPelsPerMeter=0;
bif.biYPelsPerMeter=0;
bif.biClrUsed=0;
bif.biClrImportant=0;

fp=fopen(fn,"wb");

fwrite(&bfh,sizeof(bfh),1,fp);
fwrite(&bif,sizeof(bif),1,fp);
fwrite(rgb,sizeof(rgb),1,fp);

for(j=maxy-1;j>=0;j--){
for(i=0;i<maxx;i+=2){

mycolor.color.c2=color[getpixel(i,j)];
mycolor.color.c1=color[getpixel(i+1,j)];

putc(mycolor.value,fp);

}
}

fclose(fp);

}

main()
{
int gd=DETECT,gm;

int maxx,maxy,key;

registerbgidriver(EGAVGA_driver); /*用了这个函数后,你的程序就算在下面没指明BGI
路径也能在每台机器上运行,具体做法见我们论坛上贴子,<独立图形程序的建立>
http://www.sprogram.cn/bbs/read.php?tid=56
不用这函数就要指明TC下BGI 的路径*/
initgraph(&gd,&gm,"");/*如没有完成上面步骤,""内写上TC中 BGI路径,如我的是d:\\tc3\\BGI*/

maxx=getmaxx()+1;
maxy=getmaxy()+1;

setcolor(14);
circle(maxx/2,maxy/2,50);
setcolor(15);
line(maxx/2-100,maxy/2-50,maxx/2+100,maxy/2-50);

save_pic("t.bmp",maxx,maxy);
getch();

closegraph();
}

BMP格式是公开的,非常简单,有一个固定结构的头,存储图像的宽度、高度、色深等数据,后面的数据都是以四个一组的字节数据,存储R G B F信息,也就是一个像素点的颜色。msdn上有相关的示例。

最后面加一个getch();
就不会闪过了

这个一闪的问题不是很好解决


关于用C语言画图的一些问题
用graphics函数 坦克图画:include"graphics.h"include"conio.h"void Tanke(int x,int y,int R,int TColor,int FColor){ int i,j,d,t;d=R\/4;t=d*0.6;setcolor(TColor);\/*---*\/ line(x-R,y,x+R-t,y);line(x-R,y,x-R+d,y+2*d);line(x-R+d,y+2*d,x+3*d,y+2...

画图的格式是什么
画图的格式一般默认为bmp格式。而画图工具支持8种图片格式。打开画图,选择“另存为”,在另存为命令框格式下拉箭头可显示支持的图片格式。BMP格式: Windows系统下的标准位图格式,未经过压缩,一般图像文件会比较大。在很多软件中被广泛应用。JPEG格式: 也是应用最广泛的图片格式之一,它采用一种特殊的有...

利用Win7自带的画图工具怎么画流程图
如何用windows自带画图工具制作简易流程图 1、开启开始选单——附件——画图工具 2、然后放在一边不用管,接下来开启所需要截图的资料,按键盘功能区的print screen按钮 3、开启画图工具,单击左上角的“贴上”按钮,即可显示所需要的图片 4、储存即可 怎样利用Win7自带的画图工具绘制多功能箭头 ...

急!请问,如何用C语言画一个五角星(用*组成)?
我自己弄出来了,不好意思,我自己来回答了。程序如下:include<stdio.h> void main(){ int i1,j1,k1,i2,j2,k2,i3,j3,k3,i4,j4,k4,m4,n4;printf("Let's draw a five pointed star below:\\n");for(i1=1;i1<6;i1++)\/*这是五角星的上面一个角*\/ { for(j1=1;j1<19-i1;j1...

R语言绘图如何让多个图像显示于同一图中
将4张图分屏显示在同一图中,代码如下:数据:pie.sales <-c(39,200,42,15,67,276,27,66)names(pie.sales) <- c("EUL","PES","EFA","EDD","ELDR","EPP","UNE","other")分屏:split.screen(c(2,2))figure 1:screen(1)pie(pie.sales,radius = 0.9,main = "Ordinary chart"...

在电脑上绘画需要使用什么软件呢??
2、sai Easy Paint Tool SAI这个软件相当小巧,而且免安装。SAI的许多功能比起业界标准的绘图软件Photoshop要人性。 画板可以任意旋转、翻转画布,缩放时反锯齿,以及强大的墨线功能。3、photoshop Adobe Photoshop,简称“PS”,是由Adobe Systems开发和发行的图像处理软件Photoshop主要处理以像素所构成的数字...

画图插画-用PS如何画插画,求步骤!
1,打开PS,新建文件选择用300分辨率画图,后期如果想要印刷出来都方便。2,新建图层绘制,选择方头笔刷,记得随时保存文件,笔刷在文后网盘下载。3,给背景填充一个颜色草稿放在最上面,根据想画的主色调来填充,颜色灰一点,饱和度不要太高,画剪影的时候会初步配色,配色也可以去找参考。4,然后分图层画剪影,用...

C语言有没有自带画图函数库,该怎么应用?
有,你可以使用graphics.h 头文件调用标准C函数 不过 16位c编译器绘图,就是中断调用 turboc的图形库就是封装了中断调用,不过支持的分辨率最高只有640*480 并不支持SVGA 支持SVGA的高分辨率绘图通过调用中断 10h的4f功能来实现 主要分辨率设置代码 unsigned char set_SVGA_mode(int vmode){union REGS r...

幼儿园中班绘画课件(精选5篇)
先用笔画乌龟的背壳,再给乌龟画上头和眼睛嘴巴,最后给乌龟画上四条腿,先画小鸟的头再画它的身体,接着画上小鸟的翅膀和尾巴,再给画面添画上天空和湖面等相应的背景,最后给整幅画图上漂亮的颜色。 3、幼儿自由绘画《乌龟》,教师进行指导。 三、结束部分 展示幼儿作品,引导幼儿评价作品。比比谁的画面饱满,色彩...

论文画图一般用什么工具
论文画图一般使用的工具有Microsoft Excel 或 Google Sheets、Adobe Illustrator、Python with Matplotlib, Seaborn, Plotly、PowerPoint 或 Keynote。一、Microsoft Excel 或 Google Sheets 这些电子表格程序是制作简单图表(如柱状图、折线图和饼图)的理想工具。Excel 或 Google Sheets 提供了一系列预先定义的...

芗城区15390998155: 请问怎么保存用c语言画出的图形? -
党花八味: 我的想法是:直接读取显存内容,读出像素值,然后自己写个图像文件头数据,再一起存入文件.

芗城区15390998155: C语言在运行下怎么截图 -
党花八味: 用键盘的一个键:print screen 退出C语言界面后在画图里右键粘贴,然后保存图片就可以了

芗城区15390998155: 怎样用C语言显示一张jpg的图片呢 -
党花八味: 可以用函数OleLoadPicture从包含有图像数据的流中装载图像. 具体实现代码如下:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 ...

芗城区15390998155: 如何用C语言设计一幅图片 -
党花八味: 看你想用什么工具喽,处理图片,首先要了解的是图片储存方式,最简单的要属bmp,也就是位图,win32自带有函数可以调用操作位图,它保存的是每个点的颜色与位置,当然二进制码没有你想的那么简单,使用的好像是调色板模式储存的.最厉害的压缩图片是jpg,现在很多高清的也用它,里面的代码方式暂时不知道,不过人家提供的函数接口,可以直接调用,最后处理图片时,最难的地方就在于放大或缩小,这里需要考虑的问题是仿真技术,往深了可能难懂,简单点的就是将放大或缩小后改变的区域用原有的颜色进行渐变. 想做出类似画图的软件,还是很麻烦的,画图画线都好说,主要难在添充颜色.

芗城区15390998155: 如何用c语言画出图中图形 -
党花八味: #include <stdio.h> main() { printf(" * \n"); printf(" *** \n"); printf(" *****\n"); printf("*******\n"); printf(" *****\n"); printf(" *** \n"); printf(" * \n"); }

芗城区15390998155: C语言如何画图 -
党花八味: c语言是函数语言,所以画图也离不开各种图形函数:下面举几个简单的例子: ======================================= 1./*学用circle画圆形*/ #include "graphics.h" main() {int driver,mode,i; float j=1,k=1; driver=VGA;mode=VGAHI; ...

芗城区15390998155: C语言编写一个简单的制图程序 -
党花八味: #include <windows.h> int main(){ HDC hdc; HBRUSH hBrush; HPEN hPen; RECT rect; rect.left=0; rect.right=300; rect.top=0; rect.bottom=300; hdc=GetDC(NULL); hBrush=CreateSolidBrush(RGB(255,0,0)); SelectObject(hdc,hBrush); Rectangle(hdc,...

芗城区15390998155: 用c语言绘制机械图 -
党花八味: #include<stdio.h>#include<graphics.h>#include<conio.h>#include <string.h>#include<stdlib.h> float L1,L2,L3,H1,H2,H3,W1,R1,mmaxx,mmaxy;/*长度的为62616964757a686964616fe58685e5aeb931333337626236L1,其次为L2-60,定位尺寸L...

芗城区15390998155: c语言怎么画图? -
党花八味: C语言本身没有提供与绘图相关的函数调用,但是调用其他图形库,就可以很轻松实现绘图功能. 比如,SDL,http://www.lazyfoo.net/SDL_tutorials/.

芗城区15390998155: c语言画图 -
党花八味: 没错,一个圆加一个可移动的圈

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网