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图片用手划动显示上一张与下一张图片的更多相关文章

  1. 颜色模式中8位,16位,24位,32位色彩是什么意思?会有什么区别?计算机颜色格式( 8位 16位 24位 32位色)<转>

    颜色模式中8位,16位,24位,32位色彩是什么意思?会有什么区别简单地说这里说的位数和windows系统显示器设置中的颜色位数是一样的.表示的是能够显示出来的颜色的多少. 8位的意思是说,能够显示出 ...

  2. 第一个FPGA工程----点亮开发板上的3个LED灯

    第一个FPGA工程----点亮开发板上的3个LED灯 1.新建FPGA工程 开启Quartus2的画面 File--New Project Wizard..指定工程的路径与工程名 指定所使用的FPGA ...

  3. 生成24位字符串ID__IdGenerator.java

    此工具类用于生成24位字符串ID,唯一不重复.直接通过 IdGenerator.get() 获取. 源码如下:(点击下载源码 - IdGenerator.java ) import java.net. ...

  4. 为什么24位位图(真彩色)的biSizeImage不等于(biWidth*biBitCount+31)/32*4*biHeight?

    规定的,规定BMP文件的像素数据是按行存储的,而且每行的字节数必须为4的倍数,如果实际的像素数据不是4的倍数咋办?这就需要字节对齐,对齐是在一行的末尾添0以补足一行的字节数为4的倍数, ( biWid ...

  5. 24位和8位BMP图片保存纯C代码

    BMP图片大家都知道,可以通过查看BMP图片结构使用纯C就可以打开,编辑,处理,保存图片.非常方便使用. 具体BMP结构可以参考:wingdi.h头文件.今天主要在进行删减代码,需要把多余的代码删除, ...

  6. 图像转置的SSE优化(支持8位、24位、32位),提速4-6倍。

    一.前言 转置操作在很多算法上都有着广泛的应用,在数学上矩阵转置更有着特殊的意义.而在图像处理上,如果说图像数据本身的转置,除了显示外,本身并无特殊含义,但是在某些情况下,确能有效的提高算法效率,比如 ...

  7. iTOP-开发板-MiniLinux-C程序调用shell命令

    本文档介绍的是在 linux 系统环境下 linux-C 调用 shell 命令实验步骤,和文档压缩包一起的“iTOP-开发板-MiniLinux-SHELL_V1.0.zip”是 c 程序源码.Li ...

  8. SSE图像算法优化系列四:图像转置的SSE优化(支持8位、24位、32位),提速4-6倍

    一.前言 转置操作在很多算法上都有着广泛的应用,在数学上矩阵转置更有着特殊的意义.而在图像处理上,如果说图像数据本身的转置,除了显示外,本身并无特殊含义,但是在某些情况下,确能有效的提高算法效率,比如 ...

  9. 树莓派进阶之路 (020) - 基于24位AD转换模块HX711的重量称量实验

    参考文档:http://www.geek-workshop.com/thread-2315-1-1.html 参考文档:https://wenku.baidu.com/view/e5d5e4e2652 ...

随机推荐

  1. C#使用FFmpeg 将视频格式转换成MP4示例

    一.常用视频格式分辨率 640x480p 720p格式,分辨率为1280×720p / 60Hz,行频为45kHz 1080p格式,分辨率为1920×1080逐行扫描,专业格式 二.FFmpeg部分参 ...

  2. 基于Keepalvied的Mysql主主漂移(切换)

    Keepalived实现原理:Keepalived详细介绍简介 实验环境 Master1.Amoeba--IP:192.168.1.5 Master2---IP:192.168.1.10 同时安装ke ...

  3. STL中的所有算法(70个)

    STL中的所有算法(70个)----9种类型(略有修改by crazyhacking) 参考自: http://www.cppblog.com/mzty/archive/2007/03/14/1981 ...

  4. webservice-概念性学习(一)

    以下是本人原创,如若转载和使用请注明转载地址.本博客信息切勿用于商业,可以个人使用,若喜欢我的博客,请关注我,谢谢!博客地址 学习webservice之前呢,我想说我们先学习以下的知识,对你以后的学习 ...

  5. Victor 串口 VCL 控件 - 简单实用, 功能强大的 C++ Builder 串口控件!

    源:Victor 串口 VCL 控件 - 简单实用, 功能强大的 C++ Builder 串口控件! 2014年02月06日发布控件的重要更新版本: Victor 串口控件 1.5.0.2 版本 (包 ...

  6. tp 框架的增

    //增 public function test() { //数据访问 //造模型对象 $nation = D("Nation"); $,'页面跳转中请稍后....'); } pu ...

  7. IOS第三方数据库--FMDB

    iOS中原生的SQLite API在使用上相当不友好,在使用时,非常不便.于是,就出现了一系列将SQLite API进行封装的库,例如FMDB.PlausibleDatabase.sqlitepers ...

  8. EasyUI--datebox设置默认时间

    1. html代码: <input id="txtBeginTime" class="easyui-datebox" data-options=" ...

  9. cocos2d-x 定时器selector的使用 :schedule的使用

    在游戏设计时,我们需要不断的改变屏幕显示来反映游戏操作的效果,最简单的就是提示用户已经进行的游戏时间.为此,我们需要使用cocos2d-x内置的任务调度机制,即CCNode的schedule成员函数. ...

  10. ps--记录几个方法步骤

    1.图片文字去掉 1.1 矩形工具-->吸管-->alt+delete 1.2 钢笔工具-->Ctrl+回车(变换选区)-->吸管-->alt+delete 2.图层锁不 ...