针对 基于海思开发板的屏幕截图程序(一)作了改进,上篇文章的截图结果不正确的原因是:我公司的开发板上fb0中设置的图片格式为ARGB1555,但是我将它作为RGB565来使用,导致转换出来的图片数据不正确,所以压缩后的图片自然会失真。
关键函数是:ARGB1555_to_RGB24() // 将ARGB1555格式的图像数据转换成RGB24的格式。完整代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <time.h>
#include <string.h>
#include <fcntl.h>
#include <malloc.h>
#include <linux/fb.h>
#include <jpeglib.h>
#include <jerror.h>
#include <errno.h>
extern int errno;
/*
功能: 获取当前系统时间
返回值: 指向时间字符串的开始位置
*/
static const char* getCurTime() // 获取当前系统时间
{
static char ret[30] = {0};
time_t t;
struct tm *tp;
t = time(NULL);
tp = localtime(&t);
memset(ret, 0, sizeof(ret));
sprintf(ret, "%02d%02d%02d_%02d%02d%02d", tp->tm_year+1900, tp->tm_mon+1, tp->tm_mday, tp->tm_hour, tp->tm_min, tp->tm_sec);
return ret;
}
/*
功能: RGB565转RGB24函数
rgb565: 指向存放rgb565数据的起始地址
rgb24: 指向存放rgb24数据的起始地址
width: 屏幕(分辨率)的宽度
height: 屏幕(分辨率)的高度
*/
int RGB565_to_RGB24(unsigned char *rgb565, unsigned char *rgb24, int width, int h