打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
STM32开发板上BMP图片的显示之四
2011-09-08 11:27

STM32开发板上BMP图片的显示之四

四、BMP图片显示功能扩展

能够对图片进行缩小显示,比如前面那个480x384的图片,能够缩小比例显示在液晶屏上。

3、图片的缩小

(1)分析

这里主要是实现整数倍的缩小,比如缩小为原来的 1/2 1/3等等。当显示图像的时候,跳过一些像素。比如缩小3倍,则每3个像素里取一个显示。

(2)实现的思路

假象显示窗口后面有一个缩小了3倍(宽和高同时缩小)的位图文件。通过显示窗口与该位图文件的关系,得到要显示的位图文件的行列值。比如要显示第Y行,第X个像素,实际在文件数据区是 取得第3Y行、第3X列的颜色数据,显示在液晶上。

 

(3)程序代码设计

Bmp_ShowWidth = PicInfo.BmpWidth/size;

Bmp_ShowHeight = PicInfo.BmpHeight/size;

以上两行代码取得缩小后位图文件的显示宽度和高度。

PixelOffset = PicInfo.DataOffset + size* ( Bmp_ShowHeight-1 - BmpRow )\

*PicInfo.BytePerRow+ ( PicInfo.BitPerPixel * BmpCol*size )/8;

以上代码的含义是当显示BmpCol行、BmpCol列的时候,实际是取得3 BmpCol行、3 BmpCol列处的颜色数据。

 

由于代码较长,这里就不例举了。

以下是缩小的显示效果。

 

 

4、单色、16色、256色图片的显示。

这三类图形都具有彩色表。像素数据实质是在彩色表里的索引,每个颜色占据四个字节。以256色图片为例:

res = f_read (&BmpFile, (void *)UserBuf, 1, &ByteRead); //这句话是读出像素数据,8位。

ColorTableOffset = PicInfo.ColorOffset + UserBuf[0]*4; //这个语句是根据像素索引定位相应颜色在颜色表中的位置。

res = f_lseek ( &BmpFile, ColorTableOffset );//文件定位到相应颜色项

res = f_read (&BmpFile, (void *)UserBuf, 3, &ByteRead); //取出索引对应的颜色,可以在液晶上画出该像素。

经测试,256色图片的读取速度比24位真彩色要慢的多,显示一副图片需要一分多钟,因为取得一个像素需要读两次文件。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
20120730090153602.bmp 655×542 像素
Linux下利用libjpeg实现bmp与jpg相互转换C代码
我的DIY激光雕刻机
用PS对图片进行无损放大
如何把word里面的图片导出来
清清荷香
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服