一、运行环境介绍
Linux系统: Redhat6.3 (32位)
gcc 版本 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC)
二、功能介绍
创建一张BMP图片,将图片当做画板,在图片的指定位置绘制常用ASCII字符串。
三、核心代码
可以传入任意尺寸的图片进行生成绘制。
代码语言:javascript复制#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#pragma pack(1) //强制1个字节对齐
//BMP的文件头
struct _BMP_HEAD
{
char type[2]; //图片的类型 "BM"
unsigned int size; //文件大小
unsigned short r1; //保留1
unsigned short r2; //保留2
unsigned int seek; //数据偏移字节(真实像素点数据)
};
//BMP的参数信息
struct _BMP_INFO
{
unsigned int size; //当前结构体大小
unsigned int w; //宽度
unsigned int h; //高度
unsigned short flag; //固定为1
unsigned short bit; //像素点的位数
unsigned int r1; //压缩方式 0
unsigned int r2; //水平分辨率
unsigned int r3; //垂直分辨率
unsigned int r4; //垂直分辨率
unsigned int r5; //引用色彩
unsigned int r6; //关键色彩
};
//外部引用声明
extern unsigned char DATA_8_16[95][16];
/*
函数功能: 显示像素点
*/
void Display_Point(char *head,int w,int x,int y,int c)
{
unsigned char *p=(unsigned char *)(head w*3*y x*3);
*(p 0)=(c>>0)&0xFF;
*(p 1)=(c>>8)&0xFF;
*(p 2)=(c>>16)&0xFF;
}
/*
函数功能: 显示一个数据
函数参数:
char *font 取模数据的首地址 (横向取模--高位在前)
int w 取模字体的宽度
int h 取模字体的高度
*/
void Display_Data(char *font,int w,int h,char *image_head,int image_w,int x,int y)
{
int i,j;
int x0=x;
unsigned char data;
for(i=0;i<w/8*h;i )
{
data=font[i];
for(j=0;j<8;j )
{
if(data&0x80) //画前景色
{
Display_Point(image_head,image_w,x0,y,0xFF0033);
}
else //画背景色
{
//Display_Point(image_head,image_w,x0,y,0x0066FF);
}
x0 ;
data<<=1;
}
if(x0-x==w) //换行
{
x0=x;
y ;
}
}
}
/*
函数功能: 绘制字符串的函数
函数参数:
char *str 要绘制的字符串 (横向取模--高位在前)
int w 取模字体的宽度
int h 取模字体的高度
*/
void Display_String(char *str,int w,int h,char *image_head,int image_w,int x,int y)
{
while(*str!='