研究了BMP文件格式后,突发奇想,在位图文件中直接画图(虽然看不见图象,只要有显示位图的手段,就能看到画图的结果)
文件头是可以随意定义的(只要符合位图文件要求)。程序可以直接改写象素数据来达到画图目的!
下面的C代码大意给出画点/线的方法,画点的场景是一张1024*768的位图文件(在文件中画点),主要的意思是:先生成一个1024*768的位图文件,设置其背景颜色为黑色(RGB(0,0,0)),然后给出画点的方法:给1024*768的象素点中的一个改变颜色为红色(RGB(255,0,0))
#define outputfileb "pixel.bmp"
#include "string.h"
#include "stdio.h"
#include "math.h"
...
file * outfileb;
char outnameb[1024];
strcpy(outnameb,outputfileb);
remove(outfileb);
outfileb=fopen(outnameb,"ab+");
int i,j,k;
i=j=k=0;
unsigned char head[54];
for(i=0;i <54;i++)head[i]=0x00;
head[0]='B';head[0]='M';head[2]=0x36;head[4]=0x24;head[10]=0x36;head[14]=0x28;head[19]=0x04;head[23]=0x03;head[26]=0x01;head[28]=0x18;head[36]=0x24;
for(i=0;i <54;i++){fprintf(outfileb,"%c",head[i);}
unsigned char r,g,b;
r=ox00;g=ox00;b=ox00;//background color is black
for(j=1;j <=768;j++)
for(i=1;i <=1024;i++)
{
if((i==100)&&(j==200)){r=oxff;g=ox00;b=ox00;}//指定在(100,200)处画点,颜色为红色
if(abs(j-2*i) <=3){r=ox00;g=oxff;b=ox00;}//画绿色线
fprintf(outfileb,"%c%c%c",b,g,r);}
}
fcloseall();
这样画出来的东西是直接画在画布(位图文件)上的吆,改变画布大小,就相当于改变分辨率!