在发板实现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 ...
随机推荐
- Android ---paint类
引自:http://www.cnblogs.com/-OYK/archive/2011/10/25/2223624.html Android Paint和Color类 要绘图,首先得调整画笔,待画 ...
- KVO & 通知 小记
KVO的全称是Key-Value Observing,它实现了一种机制,对所关心的属性对象添加观察者,当属性值发生变化时会得到通知,我们可以对变化做相应的处理.看过设计模式的同学应该知道,这是一种典型 ...
- backtrack种子
下载链接:(种子文件) BT5R3-GNOME-64.torrent (md5: 8cd98b693ce542b671edecaed48ab06d) BT5R3-GNOME-32.torrent (m ...
- 使用virsh命令创建KVM虚拟机快照
查看虚拟机所在主机和虚拟机名称:[root@node-1 ~]# nova show a88dcf5d-c8b2-46a5-af27-a176d8235c9d|grep hyper| OS-EXT-S ...
- ios复制到剪贴板
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #000000 } p.p2 { margin: 0.0px 0. ...
- input file图片上传预览
两种方法,方法一: js代码: //头像上传预览 $("#up").change(function() { var $file = $(this); var fileObj = $ ...
- [Unity]背包效果-使用NGUI实现物品的拖拽效果Drag
背包效果-使用NGUI实现物品的拖拽效果Drag 效果实现如图 对象层级关系图 PacketCell - Right 对象作为单元格背景 PacketContainer 对象作为单元格容器 Packe ...
- Jobject 使用
obj2 = JObject.Parse(result.Html); JArray _Jarr = _obj["data"]["siteList"].Value ...
- tempnam问题
tempnam()函数创建一个具有唯一文件名的临时文件 若成功,则返回新的临时文件名,若失败,则返回false 失败原因 c:\windows\temp文件夹不具备读写权限(即 不是超级管理员)
- [iOS Animation]-CALayer 图层性能
图层性能 要更快性能,也要做对正确的事情. ——Stephen R. Covey 在第14章『图像IO』讨论如何高效地载入和显示图像,通过视图来避免可能引起动画帧率下降的性能问题.在最后一章,我们将着 ...