历史上的今天
返回首页

历史上的今天

今天是:2024年09月16日(星期一)

2019年09月16日 | S3C2440开发板上BMP图片的显示之二

2019-09-16 来源:eefocus

二、BMP图片显示测试程序设计

1、测试程序结构设计

(1)目的

确认对BMP结构的认识,加深对RGB颜色格式的理解。

能够在液晶上显示一个160 x 128 大小的图片。(正好与液晶的大小相同)

 

(2)实现方案

添加一个命令mptest。

在命令处理程序中,先打开图片文件,读入前面54个字节。检查“BM”标志,如果不是BMP退出。

将BMP文件的主要信息读入BMPINFO结构体,如果文件是压缩过的,也不支持,退出程序。

从127行开始,一行一行的读取位图的点阵数据,送液晶显示。

 

(3)程序结构和流程设计

先添加命令mptest及其处理程序。

在处理程序中,主要作如下处理:

res = f_open ( &BmpFile, (const char *)BmpStr, FA_READ);//打开文件

res = f_read ( &BmpFile, (void *)UserBuf, 54, &ByteRead); //先读开始54字节,BMP文件头一般都这么大;

if ( LOAD_U16 ( UserBuf + BMPHEAD_FLAG )!= BMP_FLAG ){//判断是否为BMP文件

Uart_PutString ( "File Format does't surport!" );

return; } //对比开头两个字节是否“BM”。

 

PicInfo.DataOffset=LOAD_U32(UserBuf+BMPHEAD_DATAOFFSET );//图像点阵数据区在文件中的偏移。

PicInfo.ColorOffset = LOAD_U32 ( UserBuf + BMPHEAD_INFHEADSIZE ) + 14; //图像颜色表在文件中的偏移 = 信息头的大小+ BMP文件头14个字节。一般为54字节。

PicInfo.BmpWidth = LOAD_U32 ( UserBuf + BMPHEAD_WIDTH );//图像的像素宽度

PicInfo.BmpHeight = LOAD_U32 ( UserBuf + BMPHEAD_HEIGHT ); //图像的像素高度。

PicInfo.BitPerPixel = LOAD_U16 ( UserBuf + BMPHEAD_BITPERPIXEL ); //每个像素占用的位数,真彩色24位,3个字节

PicInfo.Compressed = LOAD_U32 ( UserBuf + BMPHEAD_COMPRESSED ); //图像数据是否被压缩。

PicInfo.BytePerRow //每行像素占用字节数,因为4字节对齐,需要专门计算。

= (u32) ( (u32)( ( ( PicInfo.BmpWidth*PicInfo.BitPerPixel/8 ) + 3 )/4 )*4 ) ;

 //从127行开始,一行一行的读取位图的点阵数据,送液晶显示。

for ( Row = 128; Row > 0; Row-- ){ //一行一行倒序扫描

for ( Col = 0; Col < 160; Col++ ){ // 一行160个像素扫描

PixelOffset = PicInfo.DataOffset + ( PicInfo.BmpHeight - Row ) * PicInfo.BytePerRow + ( PicInfo.BitPerPixel * Col )/8; //根据像素所在行列、每像素位数计算像素数据在文件中的偏移

res = f_lseek ( &BmpFile, PixelOffset );

res = f_read (&BmpFile, (void *)UserBuf, 3, &ByteRead); //在测试命令中,固定读取24位真彩色图,因此一次读取3个字节。

PixelColor =

(u16) ((UserBuf[0]>>3) + ( UserBuf[1]&0xFC )*8 + ( UserBuf[2]&0xF8)*256 ); //24位RGB格式转换为16位的 R:G:B = 5:6:5格式

LCD_SetPixel ( Col, Row-1, PixelColor );//送液晶显示

}

}


推荐阅读

史海拾趣

CSB公司的发展小趣事

随着国内市场的饱和,CSB公司开始将目光投向海外市场。公司制定了国际化战略,通过设立海外分支机构、拓展国际市场渠道、加强与国际合作伙伴的合作等方式,逐步实现了全球市场的布局。在国际市场上,CSB公司的产品和服务得到了广泛认可,为公司带来了丰厚的回报。

这些故事虽然是对电子行业企业发展的一般性描述,但可能在一定程度上反映了CSB公司或其他类似企业在电子行业中的发展历程。然而,需要注意的是,每个企业的发展道路都是独特的,具体的故事还需根据企业自身的实际情况来编写。

DL Instruments LLC公司的发展小趣事

DL Instruments的成功离不开其领导层的智慧与远见。David Woolston先生作为公司的创始人之一,凭借其丰富的行业经验和敏锐的市场洞察力,带领公司不断突破自我、超越竞争对手。他注重人才培养和技术创新,为公司的发展奠定了坚实的基础。

Gruner AG公司的发展小趣事
在信号处理电路中,光耦合器可以隔离噪声和干扰,确保信号的完整性和准确性。
HTSEMI( Jin Yu Semiconductor )公司的发展小趣事

为了进一步提升技术实力,金宇半导体积极与国内外知名高校和科研机构建立合作关系。2010年,公司与某顶尖大学联合成立了“先进半导体技术研究中心”,共同开展前沿技术的研发。通过产学研的紧密合作,金宇半导体在先进制程工艺、芯片封装测试等领域取得了重大突破,成功推出了多款具有自主知识产权的高端芯片产品,进一步巩固了其在行业内的领先地位。

上海晶岳(AFSEMI)公司的发展小趣事

在半导体行业中,供应链的稳定性和可靠性对于企业的生存和发展至关重要。晶岳电子深知这一点,因此一直致力于与流片及封装厂建立长期稳定的合作关系。公司的晶圆流片合作伙伴包括大陆的CSMC、ASMC,台湾的世界先进等公司;封装的合作伙伴则包括长电科技、上海芯哲等大陆上市企业。通过与这些合作伙伴的紧密合作,晶岳电子确保了产品质量的稳定性和交货期的可靠性,为公司的持续发展提供了有力保障。

这五个故事只是上海晶岳(AFSEMI)公司发展历程中的一部分,但它们充分展示了晶岳电子在电子行业中的崛起和成长。凭借对技术的执着追求和对市场的敏锐洞察,晶岳电子在激烈的市场竞争中脱颖而出,成为了行业内的一支重要力量。

Chemtronics公司的发展小趣事

近年来,Chemtronics通过一系列收购活动进一步扩大了其业务范围。其中,最引人注目的是其子公司Wits以超过6亿元人民币的价格收购三星电机的电信模块业务。这一收购不仅增强了Chemtronics在电信领域的实力,也为其未来的发展打开了新的篇章。

这五个故事展示了Chemtronics公司在电子行业中的发展历程,从最初的清洁剂产品到完整的产品线,从遵循高标准的质量制造到成为大型企业的全资子公司,再到无铅产品线的创新和收购三星电机电信模块业务,每一个阶段都体现了公司的创新精神和对市场需求的敏锐洞察。这些故事不仅记录了Chemtronics的成长轨迹,也展示了其在电子行业中的重要地位。

问答坊 | AI 解惑

问一个弱弱的问题

用MAX232来做RS232接口,是不是必须用51单片机的RX,TX脚,用其他的可不可以?…

查看全部问答>

给大家看一下我抄的小示波器

       搞东西没示波器还真不行,前面做了一个,那玩意儿几乎不能用,于是再做了一个, 模拟采样部分还是采用大家熟悉的那个什么AD603+ads830,几乎就是抄的,唉,没办法 就是这个电路还没调好,模拟部分不好用, ...…

查看全部问答>

DSP信号再再求教

因果线性时不变离散系统为输入信号x(n)=n.u(n)激活。相应的输出信号被描述为y(n)=u(n - 1)。是否传递函数H(z)的= 1-1/ Z轴对应的信号系统和指定的一组…

查看全部问答>

求购STM32开发板

求购STM32开发板,只要便宜,能用就行,有闲置的大哥大姐可以联系我哈。。QQ:405962617!…

查看全部问答>

vxworks lpc2106 protues 玩

空闲时间在protues中移植了vxworks5.5 for arm。 大家有没有兴趣啊,不是很严谨,玩时弄的…

查看全部问答>

马达控制面临众多挑战,MCU如何应对?FOC会成为流行趋势?

“无刷式电机正逐渐取代较重、较大噪声、且可靠性也较低的有刷式电机。无刷式、步进式或无传感器电机虽然要求更复杂的控制,但却能提供更好的能源优化,而后者正是全球关注的焦点。”Atmel微控制器市场传信总监Philippe Faure在接受《国际电子商情 ...…

查看全部问答>

仿真软件的不可再用以及问题解决实现

软件的不可再用长期以来严重地影响着软件业的发展。人们一直努力提高软件的再用性,寻找各种能提高再用性的软件开发模式。近十年来包括IBM和微软等许多大公司倡导的组件化,构件化和中间件的软件开发模式就是提高软件再用性的一种途径,并已逐渐被 ...…

查看全部问答>

FreeRTOS消息队列等待问题

xStatus_CAN= xQueueReceive( xQueue_CAN, &CAN_QUEUE_RECEIVE, portMAX_DELAY); 一个任务中等待消息队列数据,使用阻塞等待没有超时限制,这个任务会不会挂起让其他的任务运行??? …

查看全部问答>

全新手持GPS TOUR PRO 带 Ublox G5010超小GPS模块 20元一个

东莞一个知名合资电子厂搬迁,弄了一批全新的手持GPS导航,具体看拆机图片,完整的整机只要20元一个,里面带一个Ublox G5010超小GPS模块,一个三星的闪存,一个1800mA的锂聚合物电池,拆件超值,建议一次买2个,邮费10元,50元2个包邮。 注:保证 ...…

查看全部问答>

放大器问题

放大器输入是正常的方波,输出这样是正常的么,电平转化时候,尖峰能去掉么????????在线急等啊!!!!…

查看全部问答>