资源简介
Arm平台下开发的一款触摸式简易电子钢琴,可弹奏十几个不同的音符

代码片段和文件信息
///////////////////////////////////////////////////////////
//
// Copyright(C) 2013-2017 GEC Tech. Co. Ltd.
//
// 文件: piano/src/bmp.c
// 日期: 2017-9
// 描述: 处理BMP格式图像数据
//
// 作者: Vincent Lin (林世霖) 微信公众号:秘籍酷
//
// 技术微店: http://weidian.com/?userid=260920190
// 技术交流: 260492823(QQ群)
//
///////////////////////////////////////////////////////////
#include
#include “bmp.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: %s\n“
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;
close(fd);
return rgb_buf;
}
void display(char *bmpfile char *FB
struct fb_var_screeninfo *vinfo
int xoffset int yoffset)
{
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;
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 += minfo->pixel_size;
}
rgb_buf += pad;
rgb_buf -= (minfo->width * minfo->pixel_size + pad) * 2;
}
free(tmp);
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1152056 2018-08-20 14:03 模拟钢琴\07阶段项目\bmp\background.bmp
文件 1145160 2018-08-20 14:03 模拟钢琴\07阶段项目\bmp\background.psd
文件 112856 2018-08-20 14:03 模拟钢琴\07阶段项目\bmp\bar.bmp
文件 18964 2018-08-20 14:03 模拟钢琴\07阶段项目\bmp\BMPfileFormat.png
文件 54936 2018-08-20 14:03 模拟钢琴\07阶段项目\bmp\key_off.bmp
文件 54936 2018-08-20 14:03 模拟钢琴\07阶段项目\bmp\key_on.bmp
文件 67902 2018-08-20 14:03 模拟钢琴\07阶段项目\bmp\logo.bmp
文件 16384 2018-09-10 21:36 模拟钢琴\07阶段项目\bmp\yrncxafk
文件 611285 2018-08-20 14:03 模拟钢琴\07阶段项目\Linux音频编程.pdf
文件 21316 2018-08-20 14:03 模拟钢琴\07阶段项目\mp3\d1.mp3
文件 19644 2018-08-20 14:03 模拟钢琴\07阶段项目\mp3\d10.mp3
文件 19226 2018-08-20 14:03 模拟钢琴\07阶段项目\mp3\d11.mp3
文件 18808 2018-08-20 14:03 模拟钢琴\07阶段项目\mp3\d12.mp3
文件 20898 2018-08-20 14:03 模拟钢琴\07阶段项目\mp3\d2.mp3
文件 20898 2018-08-20 14:03 模拟钢琴\07阶段项目\mp3\d3.mp3
文件 20898 2018-08-20 14:03 模拟钢琴\07阶段项目\mp3\d4.mp3
文件 20898 2018-08-20 14:03 模拟钢琴\07阶段项目\mp3\d5.mp3
文件 20898 2018-08-20 14:03 模拟钢琴\07阶段项目\mp3\d6.mp3
文件 21316 2018-08-20 14:03 模拟钢琴\07阶段项目\mp3\d7.mp3
文件 20062 2018-08-20 14:03 模拟钢琴\07阶段项目\mp3\d8.mp3
文件 20062 2018-08-20 14:03 模拟钢琴\07阶段项目\mp3\d9.mp3
文件 2422 2018-08-31 10:26 模拟钢琴\07阶段项目\piano_v1\bmp.c
文件 1995 2018-08-31 10:26 模拟钢琴\07阶段项目\piano_v1\bmp.h
文件 2892 2018-08-31 10:26 模拟钢琴\07阶段项目\piano_v1\piano.c
文件 712 2018-08-31 10:26 模拟钢琴\07阶段项目\piano_v2\inc\audio.h
文件 1995 2018-08-31 10:26 模拟钢琴\07阶段项目\piano_v2\inc\bmp.h
文件 997 2018-08-31 10:26 模拟钢琴\07阶段项目\piano_v2\inc\ts.h
文件 739 2018-08-31 10:26 模拟钢琴\07阶段项目\piano_v2\Makefile
文件 3853 2018-08-31 10:26 模拟钢琴\07阶段项目\piano_v2\piano.c
文件 793 2018-08-31 10:26 模拟钢琴\07阶段项目\piano_v2\src\audio.c
............此处省略33个文件信息
相关资源
- IAR For ARM 7.3最新注册机
- 郭天祥ARM9视频教程
- IAR ARM 7.8破解
- IAR For ARM V5.5 注册机
- IAR for ARM 7.40 破解
- IAR For ARM 7.4 破解
- uboot到linux logo显示不间断 补丁
- UNIX/LINUX编程实践教程的源码
- Linux任务管理器
- linux应用层的华容道游戏源代码
- ubuntu9.10 可加载内核模块和字符设备驱
- arm触摸屏与LCD校准程序三点校准法
- MP3文件ID3v2ID3v2APEv2标签读取
- 课程作业:模拟仓库管理系统
- ARM嵌入式项目实战
- 操作系统实验——虚存管理实验
- linux下的发包工具sendip
- 尚观培训linux许巍关于c 的笔记和讲义
- 尚观培训linux董亮老师关于数据结构的
- linux 线程池源码 c 版
- linux C 电梯程序练习
- linux下用多进程同步方法解决生产者
- 一个简单实用个人日记管理系统
- 带时间温度显示的室内灯光控制系统
- 基于ARM蓝牙传输源程序
- 成绩管理系统(数据结构)
- Linux 操作系统实验(全)
- Linux From Scratch 中文手册
- USB 驱动 让电脑与arm进行通信
- FIR低通滤波器 ccs运行环境
评论
共有 条评论