解析bmp文件(C语言)
来源:互联网 发布:淘宝营销思路 编辑:程序博客网 时间:2024/05/16 06:51
/***"picture.h***/
typedef unsigned short u16;
typedef unsigned int u32;#pragma pack(1)
struct BmpHead {
u16 identifier;
u32 file_size;
u32 reserved;
u32 x;
u32 h_size;
u32 width;
u32 heigth;
u16 planes;
u16 BPP;
u32 compression;
u32 bd_size;
u32 hresolution;
u32 vresolution;
u32 palette_numbers;
u32 important_colors;
};
#pragma pack()
/***"picture.c***/
#include <sys/mman.h>
#include <linux/fb.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include "picture.h"
#define FB_DEV "/dev/fb0"
int main(int argc, char *argv[])
{
int fd_dev;
int ret;
int fd_bmp;
int i, j;
struct fb_var_screeninfo var;
struct fb_fix_screeninfo fix;
struct BmpHead bmp;
__u8 *map, *tmp;
__u8 buff[3];
__u32 width, heigth;
__u32 fix_len;
__u32 bpp;
fd_dev = open(FB_DEV, O_RDWR);
if (fd_dev < 0) {
perror("open");
return fd_dev;
}
ioctl(fd_dev, FBIOGET_VSCREENINFO, &var);
ioctl(fd_dev, FBIOGET_FSCREENINFO, &fix);
width = var.xres_virtual;
heigth = var.yres_virtual;
bpp = (var.bits_per_pixel + 7) / 8;
fix_len = fix.line_length / bpp;
fd_bmp = open(argv[1], O_RDONLY);
if (fd_bmp < 0) {
perror("open");
close(fd_dev);
return fd_bmp;
}
ret = read(fd_bmp, &bmp, sizeof(bmp));
printf("bmphead = %d\nwidth = %d\nheight = %d\nbpp = %d\nfix_len = %d\n",
sizeof(bmp), bmp.width, bmp.heigth, bmp.BPP, fix_len);
map = (__u8 *)mmap(NULL, fix_len * heigth * bpp,
PROT_WRITE, MAP_SHARED, fd_dev, 0);
tmp = map;
for (i = 0; i < heigth; i++) {
lseek(fd_bmp, -1 * ((i + 1) * ((bmp.width * 3 + 3) / 4 * 4)), SEEK_END);
for (j = 0; j < fix_len; j++) {
if (i < bmp.heigth && j < bmp.width) {
read(fd_bmp, buff, 3);
*map = buff[0];
map++;
*map = buff[1];
map++;
*map = buff[2];
map++;
*map = 0;
map++;
}
if (j == bmp.width) {
map = map + (fix_len - bmp.width) * 4;
break;
}
}
}
munmap(tmp, fix_len * heigth * bpp);
close(fd_bmp);
close(fd_dev);
return 0;
}
- 解析bmp文件(C语言)
- C 语言bmp 解析
- Bmp文件解析(c#)
- 用C语言解析BMP文件的结构
- 用C语言解析BMP文件的结构
- 如何用C语言解析BMP文件的结构
- 用C语言解析BMP文件的结构
- 用C语言解析BMP文件的结构
- C 语言生成BMP 文件
- C语言读写BMP文件
- BMP文件操作C语言
- c语言读取bmp文件
- C语言生成BMP文件
- C语言构建BMP文件(一)
- 使用C语言读取bmp文件数据
- C语言读写bmp位图文件
- c语言读取bmp文件完整版
- BMP文件结构解析
- C++ 11 Lambda表达式
- 2012年华为软件工程师机试题
- Principles of Continuous Integration - 持续集成的原则,来自James Betteley
- Deploying OSGi Feature Repositories to a Maven Repository
- 桌面小控件_窗口小部件_窗口小工具_android.appwidget
- 解析bmp文件(C语言)
- 创建简单按钮2
- OpenWrt系列教程汇总
- WR703N OpenWrt 配置流程
- farmerbuff(C语言实现小球)
- 定义__asm块作为C宏
- 基础算法,大数加法和乘法的实现
- CLisp 17:恢复错误的再启动特性restart
- 水果机(java实现)java多态性