RGB888 和 RGB565
来源:互联网 发布:php连接mysqli代码 编辑:程序博客网 时间:2024/06/05 10:37
今天作练习,是一个将RGB888的图像转换成RGB565在ARM 的 LCD上显示的小程序。里面的移位来移位去的完全不了。先是不管三七二是一,把程序运行了一下。图像是一行一行刷出来的,点是一个一个一行一行转换再画的。因为开始不明白的地方,我加了几条printf,于是就那个刷屏啊~~~
源程序:
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <fcntl.h>#include <math.h>#include <sys/mman.h> #include <string.h>#define DEVICE_NAME "/dev/fb0"#define XSIZE 320#define YSIZE 240unsigned short int *fb_mem_kernel; //16bitstatic void PutPixel(unsigned int x,unsigned int y,unsigned short color);unsigned int size = XSIZE*YSIZE*2;int main(void){FILE *img_fp;int fp, i, j; unsigned char red32, green32, blue32, x32, red565, green565, blue565;unsigned short rgb565;fp = open("/dev/fb0", O_RDWR);fb_mem_kernel=mmap(0,size,PROT_READ | PROT_WRITE, MAP_SHARED,fp,0);memset(fb_mem_kernel,0x00,size);img_fp = fopen("test32.bmp","r");fseek(img_fp, 0x36L, SEEK_SET);for(j=YSIZE;j>0;j--){//rgb32 to rgb 565for(i=0;i<XSIZE;i++){fread(&blue32,sizeof(unsigned char),1,img_fp);fread(&green32,sizeof(unsigned char),1,img_fp);fread(&red32,sizeof(unsigned char),1,img_fp);printf("blue32=0x%x,green32=0x%x,red32=0x%x.\n",blue32,green32,red32);red565 = red32 >> 3; // 5-bit red printf("red565=0x%x.\n",red565);green565 = green32 >> 2; // 6-bit green blue565 = blue32 >> 3; // 5-bit blue rgb565 = blue565 + (green565<<5) + (red565<<(5+6));PutPixel(i,j,rgb565) ;fread(&x32,sizeof(unsigned char),1,img_fp);//对rgb32格式而言,空读一次}}fclose(img_fp);close(fp);munmap(fb_mem_kernel,size);return 0;}static void PutPixel(unsigned int x,unsigned int y,unsigned short color){ if ((x <= XSIZE) && (y <= YSIZE)){ *(fb_mem_kernel+(y-1)*XSIZE+(x-1))=color; }}
对于里面不太懂的几个函数,查了一下:
int fseek(FILE *stream, long offset, int fromwhere);
函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere(偏移起始位置:文件头0,当前位置1,文件尾2)为基准,偏移offset(指针偏移量)个字节的位置。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置。
offset可能取值为: SEEK_SET、SEEK_CUR、 SEEK_END 依次为0,1和2.
size_t fread(void*buffer,size_tsize,size_tcount,FILE*stream);
参 数:
1.用于接收数据的地址(指针)(buffer)
2.单个元素的大小(size) :单位是字节而不是位,例如读取一个int型数据就是4个字节
3.读取size个字节的次数(count)
4.提供数据的文件指针(stream)
返回值:读取的元素的个数
=========================RGB===============================
24bit RGB888 -> 16bit RGB565 的转换
24ibt RGB888 R7 R6 R5 R4 R3 R2 R1 R0 G7 G6 G5 G4 G3 G2 G1 G0 B7 B6 B5 B4 B3 B2 B1 B0
16bit RGB656 R7 R6 R5 R4 R3 G7 G6 G5 G4 G3 G2 B7 B6 B5 B4 B3
具体量化压缩与量化补偿的介绍请看RGB888和565相互转换(这篇博文也是被转载的,不知道原文章在哪里,感谢原作者,也感谢将这个说明推广的这位朋友)- RGB888 和 RGB565
- RGB888和RGB565互相转换
- RGB565和RGB888的转换
- RGB565 & RGB888
- RGB888->RGB565
- RGB888->RGB565
- RGB888->RGB565
- RGB565,RGB888
- RGB888->RGB565
- RGB888->RGB565->RGB888
- Mini2440之LCD的RGB888和RGB565
- RGB888转RGB565
- RGB888转RGB565
- RGB888转RGB565
- RGB888转RGB565
- RGB888转RGB565
- RGB565转RGB888
- RGB888转RGB565
- 第一段基本操作与文件管理
- OPC技术作用
- Essential C++学习笔记-----第六章
- ExtJS Ext.Ajax.request与form1.getForm().submit的基本区别
- 工作记录——本周小结
- RGB888 和 RGB565
- Linux解压命令大全
- 【100题】第四十五题 雅虎面试两道题(矩阵判断、数组划分)
- 把原理图和PCB复制元件和封装到库的一些技巧(以抄OK6410的底座封装为例)
- 关于IOS伪类:hover的问题
- 在从1到n的正数中1出现的次数
- 关于绝对定位后元素(a标签)无法点击
- 判断一个app运行在foreground
- first与last的组合使用