lcd 12864液晶 显示图片
2009-06-05 13:44
1276 查看
今天花了一整天时间才搞好LCD12863显示2色BMP图片(累啊 :) )。
自已还写了一个2色BMP图片到程序数组的转换小程序bmp2txt.exe
读取2色BMP图片,BMP的头结构我就不多说了,很多书上都有。
这里我们主要注意以下几个地方。
BMP文件偏移
0x0a 图像数据的开始位置
0x12 图像的宽度
0x16 图像的高度
0x1e 图像是否压缩
(这里我们只讨论不压缩的,用windows的画笔画一幅画存盘的时候选单色就行了)
BMP的2色图像是倒着存放的,即第一个数据字节表示是的图像最后一行的前8
个点"1"表示白色,"0"表示黑色(当然也可跟椐调色板来设置)
BMP图片数据每行要DWORD对齐,也是一行的字节数必须为4的倍数,如一行的数
据只有8个点为0xff 而BMP表示为 0xff 0x00 0x00 0x00
然后用bmp2txt.exe 将所画的2色图转为程序代码,copy到程序中编译就OK了。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/08/391002b4383c1829b82c24c776ed7346.jpg)
关键代码:
/*
读BMP图像 2色 未压缩
*/
#define BMP_HEIGHT 0x16
#define BMP_WIDTH 0x12
#define BMP_COMPRESSION 0x1e
#define BMP_bfOffBits 0x0a
//COMPRESSION
#define BI_RGB 0
#define BI_RLE8 1
#define BI_RLE4 2
#define BI_BITFIELDS 3
const unsigned char Bitmap[1070] PROGMEM={ //bmp2txt.exe生成的图像数据
......
};
void drawBitmap(const uchar *bmp)
{ //画图像
signed char x,y;
uchar bmpHeight,bmpWidth,wByte;
uint lpOffset;
uchar dat;
uchar nx=0;
uchar i;
uint numb;
lpOffset=pgm_read_byte(bmp+BMP_COMPRESSION); //bmp[BMP_COMPRESSION];
if(lpOffset!=0) return; //只处理未压缩的图像
bmpHeight=pgm_read_byte(bmp+BMP_HEIGHT); //bmp[BMP_HEIGHT];
bmpWidth=pgm_read_byte(bmp+BMP_WIDTH); //bmp[BMP_WIDTH];
lpOffset=pgm_read_byte(bmp+BMP_bfOffBits); //bmp[BMP_bfOffBits] 得到图像数据的偏移量
/*
1.BMP图象为到着存放的:即最后一行的数据存放在最前面
2.2色为一个字节表示一行中的8个像素点
*/
if(bmpWidth%8!=0)
{
wByte=bmpWidth/8+1;
}
else
{
wByte=bmpWidth/8;
}
if(wByte%4!=0)
{
wByte=(wByte/4+1)*4; //DWORD对齐
}
numb=0;
for(y=(bmpHeight-1);y>=0;y--)
{
for(nx=0;nx<wByte;nx++)
{
dat=pgm_read_byte(bmp+lpOffset+numb);// bmp[lpOffset+numb];
numb++;
for(i=0;i<8;i++)
{
if(tstbit(dat,(7-i))==0)
{
x=nx*8+i;
if(x<bmpWidth)
{
pixel(x,y);
}
}
}
}
}
}
仿真图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/08/fe3e01933630b862295c2d8b0db7c0b2.jpg)
源程序&工具&说明:
点击此处下载armok01104908.rar
自已还写了一个2色BMP图片到程序数组的转换小程序bmp2txt.exe
读取2色BMP图片,BMP的头结构我就不多说了,很多书上都有。
这里我们主要注意以下几个地方。
BMP文件偏移
0x0a 图像数据的开始位置
0x12 图像的宽度
0x16 图像的高度
0x1e 图像是否压缩
(这里我们只讨论不压缩的,用windows的画笔画一幅画存盘的时候选单色就行了)
BMP的2色图像是倒着存放的,即第一个数据字节表示是的图像最后一行的前8
个点"1"表示白色,"0"表示黑色(当然也可跟椐调色板来设置)
BMP图片数据每行要DWORD对齐,也是一行的字节数必须为4的倍数,如一行的数
据只有8个点为0xff 而BMP表示为 0xff 0x00 0x00 0x00
然后用bmp2txt.exe 将所画的2色图转为程序代码,copy到程序中编译就OK了。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/08/391002b4383c1829b82c24c776ed7346.jpg)
关键代码:
/*
读BMP图像 2色 未压缩
*/
#define BMP_HEIGHT 0x16
#define BMP_WIDTH 0x12
#define BMP_COMPRESSION 0x1e
#define BMP_bfOffBits 0x0a
//COMPRESSION
#define BI_RGB 0
#define BI_RLE8 1
#define BI_RLE4 2
#define BI_BITFIELDS 3
const unsigned char Bitmap[1070] PROGMEM={ //bmp2txt.exe生成的图像数据
......
};
void drawBitmap(const uchar *bmp)
{ //画图像
signed char x,y;
uchar bmpHeight,bmpWidth,wByte;
uint lpOffset;
uchar dat;
uchar nx=0;
uchar i;
uint numb;
lpOffset=pgm_read_byte(bmp+BMP_COMPRESSION); //bmp[BMP_COMPRESSION];
if(lpOffset!=0) return; //只处理未压缩的图像
bmpHeight=pgm_read_byte(bmp+BMP_HEIGHT); //bmp[BMP_HEIGHT];
bmpWidth=pgm_read_byte(bmp+BMP_WIDTH); //bmp[BMP_WIDTH];
lpOffset=pgm_read_byte(bmp+BMP_bfOffBits); //bmp[BMP_bfOffBits] 得到图像数据的偏移量
/*
1.BMP图象为到着存放的:即最后一行的数据存放在最前面
2.2色为一个字节表示一行中的8个像素点
*/
if(bmpWidth%8!=0)
{
wByte=bmpWidth/8+1;
}
else
{
wByte=bmpWidth/8;
}
if(wByte%4!=0)
{
wByte=(wByte/4+1)*4; //DWORD对齐
}
numb=0;
for(y=(bmpHeight-1);y>=0;y--)
{
for(nx=0;nx<wByte;nx++)
{
dat=pgm_read_byte(bmp+lpOffset+numb);// bmp[lpOffset+numb];
numb++;
for(i=0;i<8;i++)
{
if(tstbit(dat,(7-i))==0)
{
x=nx*8+i;
if(x<bmpWidth)
{
pixel(x,y);
}
}
}
}
}
}
仿真图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/08/fe3e01933630b862295c2d8b0db7c0b2.jpg)
源程序&工具&说明:
点击此处下载armok01104908.rar
相关文章推荐
- STM32 驱动12864液晶显示汉字、图片、画点、横线、竖线、斜线
- STM32 驱动12864液晶显示汉字、图片、画点、横线、竖线、斜线
- ST7920 12864液晶图片取模,显示你想显示的图片。
- 如何用12864液晶显示图片和绘制任意函数图象(打点)
- ST7920 12864液晶图片取模,显示你想显示的图片。
- 12864液晶串口图片显示
- 7.27lcd屏幕显示图片
- [置顶] 页面显示LCD液晶字体,特殊字体,@font-face属性详细用法,配图
- 12864显示图片
- 基于s3c2440 lcd framebuffer 320x240 驱动 测试 显示 320x240 16bpp bmp 图片测试程序
- S3C2440LCD控制器与TFT屏的字符和图片的显示
- linux驱动开发:用户空间操作LCD显示简单的图片【转】
- 第三讲 单片机C语言之12864液晶显示
- LCD 显示文字与图片
- lcd显示bmp图片程序
- 12864图片显示stc89c52RC显示史努比源代码
- [原创][连载].基于SOPC的简易数码相框 - Nios II SBTE部分(软件部分) - 从SD卡内读取图片文件,然后显示在TFT-LCD上
- Uboot中支持lcd和hdmi显示不同的logo图片【转】
- lcd 12864液晶
- STM32解码BMP图片并显示在OLED12864上面