历史上的今天
返回首页

历史上的今天

今天是:2024年10月19日(星期六)

正在发生

2019年10月19日 | 基于ARM平台的钢琴游戏 08实现音乐钢琴效果

2019-10-19 来源:51hei

//////////////////////////////////////////////////////////////////

//

//  Copyright(C), 2013-2016, GEC Tech. Co., Ltd.

//

//  File name: GPLE/bmp.c

//

//  Author: Vincent Lin (林世霖)  微信公众号:秘籍酷

//

//  Date: 2016-11

//  

//  Description: 处理BMP格式图像数据

//

//  GitHub: github.com/vincent040   Bug Report: 2437231462@qq.com

//

//////////////////////////////////////////////////////////////////


#include

#include "bmp.h"

#include "ts.h"


char * load_bmp(const char *bmpfile, struct image_info *minfo)

{

        int fd = open(bmpfile, O_RDONLY);

        if(fd == -1)

        {

                fprintf(stderr, "opening "%s" failed: %sn",

                                        bmpfile, strerror(errno));

                exit(0);

        }


        // 获得文件大小,并分配内存

        struct stat fileinfo;

        fstat(fd, &fileinfo);


        int   rgb_size = fileinfo.st_size;

        char *rgb_buf  = calloc(1, rgb_size);


        // 读取BMP内容到内存中

        struct bitmap_header header;

        struct bitmap_info info;

        struct rgb_quad quad;

        read(fd, &header, sizeof(header));

        read(fd, &info, sizeof(info));

        if(info.compression != 0)

        {

                read(fd, &quad, sizeof(quad));

                fprintf(stderr, "read quad! n");

        }

        read(fd, rgb_buf, rgb_size);


        minfo->width = info.width;

        minfo->height= info.height;

        minfo->pixel_size = info.bit_count/8;


        #ifdef DEBUG

        printf("width: %dn", minfo->width);

        printf("height: %dn", minfo->height);

        printf("pixel_size: %dn", minfo->pixel_size);

        #endif


        close(fd);

        return rgb_buf;

}


void bmp2lcd(char *bmpfile, char *FB,

                         struct fb_var_screeninfo *vinfo,

                         int xoffset, int yoffset)

{

        xoffset = xoffset>(65*12+10) ? (65*10+10) : xoffset;


        struct image_info *minfo = calloc(1, sizeof(struct image_info));

        char *rgb_buf = load_bmp(bmpfile, minfo);

        char *tmp = rgb_buf;


        // 从最后一行开始显示BMP图像

        int pad = ((4-( minfo->width * minfo->pixel_size ) % 4)) % 4; // 0-3

        rgb_buf += (minfo->width * minfo->pixel_size + pad) * (minfo->height-1);        


        FB += (yoffset * vinfo->xres + xoffset) * 4;

        int lcd_w = vinfo->xres - xoffset;

        int lcd_h = vinfo->yres - yoffset;


        int x, y;

        for(x=0; xheight; x++)

        {

                for(y=0; ywidth; y++)

                {

                        unsigned long lcd_offset = (vinfo->xres*x + y) * 4;

                        rgb_buf += minfo->pixel_size;


                        memcpy(FB + lcd_offset + vinfo->red.offset/8,   rgb_buf + 2, 1);

                        memcpy(FB + lcd_offset + vinfo->green.offset/8, rgb_buf + 1, 1);

                        memcpy(FB + lcd_offset + vinfo->blue.offset/8,  rgb_buf + 0, 1);

                }


                rgb_buf += pad;

                rgb_buf -= (minfo->width * minfo->pixel_size + pad) * 2;

        }


        free(tmp);

}


推荐阅读

史海拾趣

DBM REFLEX公司的发展小趣事

在全球环保意识日益增强的今天,DBM REFLEX积极响应可持续发展的号召。公司不仅在生产过程中注重环保和节能,还积极推广绿色产品和技术。同时,DBM REFLEX还积极参与社会公益事业,通过捐款捐物等方式回馈社会。这种对环保和社会责任的关注,使DBM REFLEX在电子行业树立了良好的企业形象。

恒连电子(EVERCOM)公司的发展小趣事

恒连电子注重企业文化建设和团队建设,为员工创造了一个良好的工作环境和发展平台。公司倡导“以人为本”的管理理念,关注员工的成长和发展,为员工提供丰富的培训和学习机会。同时,公司还建立了完善的激励机制和福利制度,激发员工的工作积极性和创造力。在团队建设方面,公司注重团队协作和沟通能力的培养,鼓励员工相互学习、共同进步。通过优秀的团队建设和企业文化建设,恒连电子打造了一支高效、专业、团结的队伍,为公司的发展提供了有力的人才保障。

ABC [ABC Taiwan Electronics Corp]公司的发展小趣事

进入新世纪,ABC Taiwan Electronics Corp面临着产业升级和技术创新的双重挑战。公司加大了对研发的投入,不断推出具有竞争力的新产品。同时,公司还引进了先进的生产设备和管理理念,提升了生产效率和产品质量。通过产业升级和技术创新,ABC成功应对了市场的变化和挑战,保持了稳健的发展态势。

迈翔科技(COILMX)公司的发展小趣事

面对未来,迈翔科技有着明确的发展规划和目标。公司将继续加大技术研发投入,不断提升产品性能和质量;同时,公司也将积极拓展新的应用领域和市场,寻求更多的合作机会和发展空间。未来,迈翔科技将致力于成为全球领先的电感器制造商之一。

以上五个故事概述了迈翔科技在电子行业中的发展历程和关键事件。这些故事展示了公司从创业初期到成为行业领导者的艰辛历程和不懈努力。

GS Yuasa Battery Sales UK Ltd.公司的发展小趣事

进入21世纪后,迈翔科技面临了来自国内外同行的激烈竞争。为了保持竞争力,公司投入大量资源进行技术研发和创新。通过不懈努力,公司成功开发出了一系列高性能的贴片功率电感和大电流电感,这些产品凭借卓越的性能和稳定的品质,迅速获得了市场的认可。

达晶微(CREATEK)公司的发展小趣事

达晶微(CREATEK)公司成立于XXXX年,由一群具有丰富半导体行业经验的专家创立。公司初期主要专注于IGBT、MOSFET、FRD、TVS、SBD等功率半导体芯片与器件的研发。凭借其对技术的深刻理解和市场需求的敏锐洞察,达晶微迅速在市场中崭露头角。

问答坊 | AI 解惑

基于单片机多机通讯系统设计

江湖救急!!请各位高手,大侠出手帮忙,在下万分感激。 前提  :  串行通讯 要求:            1.一个主机和4个子机连接;             ...…

查看全部问答>

5V电路的保护

前两天调试一块电路板,由于板子本身没有做防插错设计,导致将5V和12V的电源插插反。结果5V电路部分有几个IC烧坏,为了避免这样的情况再次发生,我目前可采取的措施有2个。 1、对电路板本身做防错设计; 2、对5V电源部分加TVS管。 这样,有几个 ...…

查看全部问答>

在WINCE下图片被撕裂的问题?请高手看一下代码。

我在WINCE下用DDRAW做UI,发现图片有时被撕裂了。现在我想用三缓冲的方法去做,希望能解决这个问题。可是我怎么做好像都不成功。下面是代码。还请高手看一下。 LPDIRECTDRAW4               g_ ...…

查看全部问答>

作嵌入式驱动程序,现在想转硬件设计,不知道好不好转啊

一直在作音视频驱动,总是在和硬件打交道。感觉还是硬件那边稳定,不用再学好多乱七八糟得编程语言。 python,jsp,vbscript,C#,。。。 硬件那边只要把电路搞得很通就行了。爽啊。…

查看全部问答>

电瓶车防盗装置电路原理

求电瓶车的防盗装置的电路原理图,发送和接受各电路原理图,解码程序,谢谢!发送能和单片机做遥控小车吗?求思路! …

查看全部问答>

09年全国大学生电子设计大赛优秀作品选集以及温度传感器的一些资料

本帖最后由 paulhyde 于 2014-9-15 03:40 编辑 芯币很难赚  …

查看全部问答>

msp430f5438测频率成功,能测60K一下频率,误差50HZ以内!

#include #include \"LCD_12864.h\" #include \"CLOCK.h\" unsigned int end,start; unsigned char overflow; unsigned long fre; int main( void ) {   // Stop watchdog timer to prevent time out reset   WDTCTL ...…

查看全部问答>

大家有没有自己写本书的想法?

我要写一本书,是不是有点意向天开?…

查看全部问答>

Altium 10作出来的lm3s下载器,漂亮!

atlium 作出来的lm3s下载器,漂亮!   不多说,上传图片!   [ 本帖最后由 paulhyde 于 2012-5-17 10:20 编辑 ]…

查看全部问答>

stm32 图像动画显示

本帖最后由 paulhyde 于 2014-9-15 03:52 编辑 在LCD屏上如何让一个图像绕某个点旋转呀?就像模拟仪表盘上的那个箭头,用C语言怎么写呀?求助、、、  …

查看全部问答>