在发板实现24位jpg和bmp图片用手划动显示上一张与下一张图片
arm-linux-gcc test.c -ljpeg -I /usr/local/libjpeg-8a/include/ -L /usr/local/libjpeg-8a/lib/
这样编译
代码
#include<stdio.h>
#include<sys/types.h>
#include<dirent.h>
#include<string.h>
#include<unistd.h>
#include<sys/stat.h>
#include<stdlib.h>
#include<time.h>
#include<fcntl.h>
#include<linux/input.h>
#include<jpeglib.h>
#include<sys/mman.h>
void draw_point(int *p,int x,int y,int color)
{
int *pf = p + (800*y + x);
*pf = color;
}
int main(int argc,char *argv[])
{
int fd=open("/dev/fb0",O_RDWR);
if(-1==fd)
{
perror("open");
return -1;
}
int fd_e = open("/dev/event0",O_RDONLY);
if(-1==fd_e)
{
perror("open_e");
return -1;
}
struct input_event ev;
DIR *dir;
struct dirent *ent;
char str[100][32];
memset(str,0,sizeof(str));
dir=opendir(argv[1]);
if(NULL==dir)
{
perror("opendir");
return;
}
int k=0;
while(ent=readdir(dir))
{
if(ent->d_type==4)
{
continue;
}
strcpy(str[k],ent->d_name);
k++;
}
closedir(dir);
int pricture_len=k;
k=0;
while(1)
{
int x1=0,x2=0,pr1=-1,pr2=-1;
while(1)
{
int r = read(fd_e,&ev,sizeof(ev));
if(r == sizeof(ev))
{
if(ev.type == EV_ABS && ev.code == ABS_X)
{
if(x1==0)
{
x1=ev.value;
}
x2=ev.value;
}
if(ev.type == EV_ABS && ev.code == ABS_PRESSURE)
{
if(pr1==-1)
{
pr1=ev.value;
}
pr2=ev.value;
}
}
if(pr2==0)
{
break;
}
}
if(x1>x2)
{
if(k<pricture_len-1)
{
k++;
}
}
else if(x1<x2)
{
if(k>1)
{
k--;
}
}
char str1[512];
char str2[512];
strcpy(str1,str[k]);
strcpy(str2,str1+strlen(str1)-4);
if(strcmp(str2,".bmp")==0)
{
char data[800*480*4];
printf("%s\n",str[k]);
int fd_bmp=open(str[k],O_RDWR);
if(fd_bmp==-1)
{
perror("open bmp");
return ;
}
lseek(fd_bmp,54,SEEK_SET);
read(fd_bmp,data,800*480*4);
lseek(fd,0,SEEK_SET);
int i,j;
for(i=0; i<480; i++)
{
for(j=0; j<800; j++)
{
char r,g,b;
int color;
r=data[((479-i)*800+j)*3];
g=data[((479-i)*800+j)*3+1];
b=data[((479-i)*800+j)*3+2];
color=(b<<16)|(g<<8)|r;
write(fd,&color,4);
}
}
printf("hello\n");
close(fd_bmp);
}
else if(strcmp(str2,".jpg")==0)
{
void *addr = mmap(NULL,800*480*4,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
if(addr == MAP_FAILED)
{
perror("mmap");
return -1;
}
struct jpeg_decompress_struct cinfo;
struct jpeg_error_mgr jerr;
cinfo.err = jpeg_std_error(&jerr);
jpeg_create_decompress(&cinfo);
FILE *infile=fopen(str[k],"r");
if(infile == NULL)
{
perror("fopen");
return -1;
}
lseek(fd,0,SEEK_SET);
jpeg_stdio_src(&cinfo, infile);
jpeg_read_header(&cinfo, TRUE);
jpeg_start_decompress(&cinfo);
unsigned char *buffer = malloc(cinfo.output_width * cinfo.output_components);
while(cinfo.output_scanline < cinfo.output_height)
{
jpeg_read_scanlines(&cinfo,&buffer,1);
int x,color;
unsigned char r,g,b;
unsigned char *p = buffer;
for(x = 0; x < 800; x++)
{
r = *p++;
g = *p++;
b = *p++;
color = (r << 16) | (g << 8) | b;
draw_point(addr,x,cinfo.output_scanline-1,color);
}
}
jpeg_finish_decompress(&cinfo);
jpeg_destroy_decompress(&cinfo);
fclose(infile);
}
}
close(fd);
close(fd_e);
return 0;
}
在发板实现24位jpg和bmp图片用手划动显示上一张与下一张图片的更多相关文章
- 颜色模式中8位,16位,24位,32位色彩是什么意思?会有什么区别?计算机颜色格式( 8位 16位 24位 32位色)<转>
颜色模式中8位,16位,24位,32位色彩是什么意思?会有什么区别简单地说这里说的位数和windows系统显示器设置中的颜色位数是一样的.表示的是能够显示出来的颜色的多少. 8位的意思是说,能够显示出 ...
- 第一个FPGA工程----点亮开发板上的3个LED灯
第一个FPGA工程----点亮开发板上的3个LED灯 1.新建FPGA工程 开启Quartus2的画面 File--New Project Wizard..指定工程的路径与工程名 指定所使用的FPGA ...
- 生成24位字符串ID__IdGenerator.java
此工具类用于生成24位字符串ID,唯一不重复.直接通过 IdGenerator.get() 获取. 源码如下:(点击下载源码 - IdGenerator.java ) import java.net. ...
- 为什么24位位图(真彩色)的biSizeImage不等于(biWidth*biBitCount+31)/32*4*biHeight?
规定的,规定BMP文件的像素数据是按行存储的,而且每行的字节数必须为4的倍数,如果实际的像素数据不是4的倍数咋办?这就需要字节对齐,对齐是在一行的末尾添0以补足一行的字节数为4的倍数, ( biWid ...
- 24位和8位BMP图片保存纯C代码
BMP图片大家都知道,可以通过查看BMP图片结构使用纯C就可以打开,编辑,处理,保存图片.非常方便使用. 具体BMP结构可以参考:wingdi.h头文件.今天主要在进行删减代码,需要把多余的代码删除, ...
- 图像转置的SSE优化(支持8位、24位、32位),提速4-6倍。
一.前言 转置操作在很多算法上都有着广泛的应用,在数学上矩阵转置更有着特殊的意义.而在图像处理上,如果说图像数据本身的转置,除了显示外,本身并无特殊含义,但是在某些情况下,确能有效的提高算法效率,比如 ...
- iTOP-开发板-MiniLinux-C程序调用shell命令
本文档介绍的是在 linux 系统环境下 linux-C 调用 shell 命令实验步骤,和文档压缩包一起的“iTOP-开发板-MiniLinux-SHELL_V1.0.zip”是 c 程序源码.Li ...
- SSE图像算法优化系列四:图像转置的SSE优化(支持8位、24位、32位),提速4-6倍
一.前言 转置操作在很多算法上都有着广泛的应用,在数学上矩阵转置更有着特殊的意义.而在图像处理上,如果说图像数据本身的转置,除了显示外,本身并无特殊含义,但是在某些情况下,确能有效的提高算法效率,比如 ...
- 树莓派进阶之路 (020) - 基于24位AD转换模块HX711的重量称量实验
参考文档:http://www.geek-workshop.com/thread-2315-1-1.html 参考文档:https://wenku.baidu.com/view/e5d5e4e2652 ...
随机推荐
- hibernate分页查询的实现
在mysql中新建数据好USER表,字段有3个,分别是id.username.password,贴上脚本仅供参考 create table `ding`.`user`( `id ...
- 使用Metasploit入侵windows之自动扫描
最新版本的metasploit为4.0,可以通过官方网站(www.metasploit.com)直接下载,因为是开源的,所以免费. metasploit很好很强大,集成了700多种exploit,但是 ...
- VS下载地址
http://www.iplaysoft.com/vs2015.html Microsoft Visual Studio(简称VS)是美国微软公司的开发工具包系列产品.Visual Studio ...
- mysql查询的cache
Mysql SQL_NO_CACHE不生效的问题 贾春春 1 票 1224 我想通过SQL_NO_CACHE得知某个query查询速度,但似乎无法实现 例如首次查询: mysql> select ...
- 如何在项目中引入 #include .h、.lib、 .dll、.cpp (转)
源:http://blog.csdn.net/vippolka/article/details/8552735 在项目中引入.h..lib和dll.以及.cpp 1..h的引入 解决办法1:把 XX ...
- ural1019 Line Painting
Line Painting Time limit: 2.0 secondMemory limit: 64 MB The segment of numerical axis from 0 to 109 ...
- 一个简单但详细的解释Windows文件映射读取数据文件的例子
#include <windows.h>#include <string.h>#include <string>#include <iostream>u ...
- PAT (Advanced Level) 1025. PAT Ranking (25)
简单题. #include<iostream> #include<cstring> #include<cmath> #include<algorithm> ...
- python第一天(文件流以及控制流)简单总结
第一天的python学习主要是: (1)对python的一个大致了解 值得注意的是在window下开发要注意path的问题. (2)对python控制流的一个了解 常用的if ,while ,for ...
- ibatis resultMap 的用法
先看个具体的例子: <resultMap id=”get-product-result” class=”com.ibatis.example.Product”> <result pr ...