bmp图片显示(任意位置任意大小)
文章目录
- 前言
- 图片显示
- 1.普通全屏(800*480)显示bmp
- 2.在任意位置显示任意大小bmp图片
- 头文件
前言
Linux系统,GEC6818,800*480,bmp图片
图片显示
由文件IO实现(open,read,write)。
1.普通全屏(800*480)显示bmp
代码如下(示例):
//显示完整图片的接口函数
void show_bmp(char *photoname)
{//存储图片像素信息char bmpbuf[800*480*3];int tmpbuf[800*480];int lastbuf[800*480];int i = 0,x = 0,y = 0;//打开BMP图片int bmpfd = open(photoname,O_RDWR);if(bmpfd == -1){//printf("完整bmp:%s\n",buf);perror("open 完整bmp");return;}//打开lcd驱动int lcdfd=open("/dev/fb0",O_RDWR);if(lcdfd==-1){perror("open");return;}lseek(bmpfd,54,SEEK_SET); //从头偏移图片属性信息54个字节read(bmpfd,bmpbuf,800*480*3); //读取图片数据/* 转换数据格式 */for(i=0; i<800*480; i++)tmpbuf[i] = 0x00<<24|bmpbuf[i*3+2]<<16|bmpbuf[i*3+1]<<8|bmpbuf[i*3];//按行翻转for(x=0; x<800; x++)for(y=0; y<480; y++)lastbuf[(479-y)*800+x]=tmpbuf[y*800+x];int *p = mmap(NULL, 800*480*4, PROT_READ|PROT_WRITE, MAP_SHARED, lcdfd, 0); if(p==MAP_FAILED){perror("mmap");return;} for(i=0; i<800*480; i++)p[i]= lastbuf[i];//4.关闭文件解除内存映射munmap(p,800*480*4);close(lcdfd);close(bmpfd); return;
}
2.在任意位置显示任意大小bmp图片
代码如下(示例):
void anywhere_InsertPhoto(int x_setoff,int y_setoff,
int width_photo,int high_photo,char *pathname)
{//printf("ccc\n");//打开bmp图片int bmpfd = open(pathname,O_RDWR);if (bmpfd == -1){perror("open bmp2");return;}//打开液晶屏的设备int lcdfd = open("/dev/fb0",O_RDWR);if (lcdfd == -1){perror("open");return;}//准备buf储存图片的像素点信息char bmpbuf[width_photo*high_photo*3];int tmpbuf[width_photo*high_photo];int lastbuf[width_photo*high_photo];//跳过图片头信息的54个字节lseek(bmpfd,54,SEEK_SET);//保存每一行的无效字节int invalid_byte = (4-(width_photo*3)%4)%4;//按行读取bmp图片的信息,跳过无效字节for (int i= 0; i<high_photo; ++i){read(bmpfd,&bmpbuf[i*width_photo*3],3*width_photo);lseek(bmpfd,invalid_byte,SEEK_CUR);}//将读取到的三字节像素点RGB填充到lcd的四字节像素点ABGR上for (int i = 0;i < width_photo*high_photo; ++i){tmpbuf[i] = 0x00<<24|bmpbuf[3*i+2]<<16|bmpbuf[3*i+1]<<8|bmpbuf[3*i];}//将读取到的四字节像素点按行中间翻转for (int i = 0; i < width_photo; ++i)for (int j = 0; j < high_photo; ++j){lastbuf[(high_photo-1-j)*width_photo+i] = tmpbuf[j*width_photo+i];}//内存映射int *mmpfd = mmap(NULL,800*480*4,PROT_READ|PROT_WRITE,MAP_SHARED,lcdfd,0);for (int i = 0; i < high_photo; ++i)for (int j = 0; j < width_photo; ++j){mmpfd[(i+y_setoff)*800+x_setoff+j] = lastbuf[i*width_photo+j];}//释放内存//不能随意释放,内存发生偏移//munmap(mmpfd,800*480*4);//关闭文件close(bmpfd);close(lcdfd);return;
}
头文件
#ifndef HEAD_H
#define HEAD_H#include <stdio.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/types.h>
#include <unistd.h>
#include <string.h>
#include <strings.h>
#include <stdlib.h>
#include <errno.h>
#include <dirent.h>
//#include <sys/ioctl.h>
//#include <linux/input.h>
//#include <sys/mman.h>
#include <stdbool.h>#endif
bmp图片显示(任意位置任意大小)相关推荐
- 【Android SDM660源码分析】- 03 - UEFI XBL GraphicsOutput BMP图片显示流程
[Android SDM660源码分析]- 03 - UEFI XBL GraphicsOutput BMP图片显示流程 1. GraphicsOutput.h 2. 显示驱动初化 DisplayDx ...
- 开发板BMP图片显示(6818开发板)
BMP图片的前54个字节保存图片信息,不保存像素点 确认图片是不是BMP类型,读取整个图片大 #pragma pack (1)typedef struct tagBITMAPFILEHEADER{ u ...
- emwin从外部flash中读取bmp图片显示
在emwin中有提供了一个从外部读取图片数据进行显示的函数,如下: 而且提供了官方例程,不过官方历程中从外部读取是从外部文件系统中进行读取的bmp图片进行显示,官方例程如下 /* ********** ...
- 【紫光同创国产FPGA教程】【第十四章】SD卡读取BMP图片显示例程
本原创教程由芯驿电子科技(上海)有限公司(ALINX)创作,版权归本公司所有,如需转载,需授权并注明出处(http://www.alinx.com). 1. 实验简介 在前面的实验中我们练习了SD卡读 ...
- 嵌入式开发板bmp图片显示
一.bmp图的实现(bitmap位图) 1.怎样去制作位图bmp图 画图软件工具 2.bmp图分辨率 800*480个像素点 3.图片的像素点是多少个字节 1个像素点 = 3个字节 4.大小 8 ...
- cad指北针lisp_用CAD里的LISP画图,题目如图片,编写一程序,可在任意位置任意方向绘制指定大小的指北针。...
写了一个,图如下: Autolisp代码如下:(defunc:tes(/&ang1&ang2&dis1&ent1&kw1&p1&p2&p ...
- activiti高亮显示图片_【正点原子FPGA连载】第二十章SD卡读BMP图片HDMI显示实验领航者 ZYNQ 之嵌入式开发指南...
1)实验平台:正点原子领航者ZYNQ开发板 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手册+视频下 ...
- 粤嵌gec6818LED屏幕上画图 太极图 图片显示 电子相册 2048小游戏 实现识别触摸坐标的识别 电子自助点餐设计等项目
交叉开发 在一个有编辑/编译功能的PC机上进行编辑/编译,生成的可执行文件通过 交叉开发工具下载到目标机(GEC-6818) 开发板 --- Linux内核 --- ...
- 用F5529控制OLED输出汉字,字符,以及bmp图片
基于F5529以及G2553的OLED显示 本文主要是给出F5529以及G2553的工程,然后针对如何使用文件里的函数进行说明.对于OLED的原理不进行细致说明. OLED的I2C时钟一定要配置准确, ...
最新文章
- Javascript正则匹配不含某子串
- 了解多线程中的yield
- pilt图像处理_Python用Pillow(PIL)进行简单的图像操作
- 数据中心成为生态系统向绿色氢经济转变的催化剂
- 就喜欢用vSphere部署K8s集群,不全是因为自动化!
- mysql 以 db 结尾_MySQL的高级部分
- springdata学习笔记-01-helloworld-(暂时不全223)
- asp 连接mysql_如何在ASP中连接MySQL数据库
- 软件工程复习提纲——第十章
- cad和python哪个好学_cad制图工资一般多少 就业前景好不好
- vue实现页面权限显示_Vue 实现前端权限控制
- java 自己实现工作流_Java基于jeeplus vue实现简单工作流过程图解
- c语言vs2013下载官方下载,Microsoft Visual C++2013运行库下载
- 土巴兔上市未卜,群核科技换个姿势能否撑起“3D云设计第一股”?
- 胡因梦-生命的不可思议
- 微信公众号申请相关问题
- 阿古斯机器人_7.3.2暗牧神器燃烧王座语音
- HTML5期末大作业:商城网站设计——仿唯品会购物商城(5页) 纯手写-高质量 HTML+CSS+JavaScript
- [保护过保护] _EPROCESS 的 Protection 成员
- Web渗透测试_目录遍历