C rgb565转rgb888
bmp.h
#define u8 unsigned char
#define u32 unsigned long
#define u16 unsigned short
int BMP_HEAD_WIDTH[4] = { 18,19,20,21 }; //图片宽度(像素)
int BMP_HEAD_HEIGH[4] = { 22,23,24,25 }; //图片高度(像素)u8 BMP_HEAD[54] = {0x42,//B0x4D,//M/*文件总字节数*/0x46,//20x00,//30x00,//40x00,//5/*保留*/0x00,0x00,0x00,0x00,/*文件头+信息头大小(14+40)*/0x36,0x00,0x00,0x00,/*信息头大小*/0x28,0x00,0x00,0x00,/*宽度*/0x02,//180x00,//190x00,//200x00,//21/*高度*/0x02,//220x00,//230x00,//240x00,//25/*固定值*/0x01,0x00,/*每个像素的位数24*/0x18,//280x00,//29/*压缩方式*/0x00,0x00,0x00,0x00,/*位图所有像素所占字节数*/0x00,0x00,0x00,0x00,/*水平分辨率 pex/m*/0x00,//380x00,//390x00,//400x00,//41/*垂直分辨率 pex/m*/0x00,//420x00,//430x00,//440x00,//45/*使用的颜色数*/0x00,0x00,0x00,0x00,/*重要的颜色数*/0x00,0x00,0x00,0x00
};
main.cpp
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string>
#include "bmp.h"#include <iostream>
#include <fstream>
using namespace std;#define PIC_HEIGH 200
#define PIC_WIDTH 200#define RGB565_MASK_RED 0xF800
#define RGB565_MASK_GREEN 0x07E0
#define RGB565_MASK_BLUE 0x001F /**
*函数功能:把rgb888数据写入24位bmp中
* 参数: width,height,*RgbData
**/
/*像素点数据 从最后一行开始,从左到右*/
u8 bmp_data[PIC_HEIGH][PIC_WIDTH*3] = {0};
void WriteRgb8882Bmp(char*filename, int heigh,int width)
{int i = 0,j=0;int BmpHeadLeng = 54;FILE* fp = fopen(filename, "w+");//D://Users//wzx//Desktop///*将宽高转换成16进制*//*修改宽高*/BMP_HEAD[BMP_HEAD_WIDTH[0]] = width & 0xff;BMP_HEAD[BMP_HEAD_WIDTH[1]] = width & 0xff00;BMP_HEAD[BMP_HEAD_WIDTH[2]] = width & 0xff0000;BMP_HEAD[BMP_HEAD_WIDTH[3]] = width & 0xff000000;BMP_HEAD[BMP_HEAD_HEIGH[0]] = heigh & 0xff;BMP_HEAD[BMP_HEAD_HEIGH[1]] = heigh & 0xff00;BMP_HEAD[BMP_HEAD_HEIGH[2]] = heigh & 0xff0000;BMP_HEAD[BMP_HEAD_HEIGH[3]] = heigh & 0xff000000;/*将文件头写入文件*/for (i = 0;i < 54;i++){fprintf(fp,"%c",BMP_HEAD[i]);}int col_len = sizeof(bmp_data[0]); //列数一行的字节数 必须是4的倍数,每个像素点用3个字节表示int row_len = sizeof(bmp_data)/col_len;//行数/*写入图片数据*/for (i = 0;i < row_len;i++){for (j = col_len;j > 0 ;j--){fprintf(fp, "%c", bmp_data[i][j]);}//一行数据写完if (col_len % 4 != 0) //一行的像素点数如果不是4的倍数,补0{for (int ii = 0;ii < col_len % 4;ii++){fprintf(fp, "%c", 0x00);}}}fclose(fp);
}unsigned int ASC2X(unsigned char ch)
{if (ch >= 'A' && ch <= 'F')return ch - 'A' + 10;else if (ch >= '0' && ch <= '9')return ch - '0';
}u8* Rgb565ToRgb888(u16 rgb565)
{u8 rgb24[3] = { 0 };rgb24[0] = (rgb565 & RGB565_MASK_RED) >> 11;rgb24[1] = (rgb565 & RGB565_MASK_GREEN) >> 5;rgb24[2] = (rgb565 & RGB565_MASK_BLUE);//往高位移动填满单字节的8位rgb24[2] <<= 3;rgb24[1] <<= 2;rgb24[0] <<= 3;//返回:RGBreturn rgb24;
}
void ReadDataFromFile()
{int i = 0;FILE* fp = fopen("d:\\rgb.txt", "r");char HB[2] = { 0 };char LB[2] = { 0 };char temp[8] = { 0 };char ch = fgetc(fp);u32 hync = 0,pclk=0;u16 RGB565 = 0;while (ch != EOF){while (ch != '\n'){temp[7-i] = ch;i++;ch = fgetc(fp);}//第一个点RGB565 = (((ASC2X(temp[3]) << 4)|(ASC2X(temp[2])) )<<8)|(ASC2X(temp[1])<<4)| ASC2X(temp[0]);bmp_data[hync][pclk] = *(Rgb565ToRgb888(RGB565) + 2); //Bbmp_data[hync][pclk + 1] = *(Rgb565ToRgb888(RGB565) + 1); //Gbmp_data[hync][pclk + 2] = * Rgb565ToRgb888(RGB565); //Rpclk += 3;//第二个点RGB565 = (((ASC2X(temp[7]) << 4) | (ASC2X(temp[6]))) << 8) | (ASC2X(temp[5]) << 4) | ASC2X(temp[4]);bmp_data[hync][pclk] = *(Rgb565ToRgb888(RGB565) + 2); //Bbmp_data[hync][pclk + 1] = *(Rgb565ToRgb888(RGB565) + 1); //Gbmp_data[hync][pclk + 2] = * Rgb565ToRgb888(RGB565); //Rpclk += 3;i = 0;ch = fgetc(fp);if (pclk >= 3 * PIC_WIDTH){hync++;pclk = 0;}}}
int main()
{ReadDataFromFile();WriteRgb8882Bmp("D://Users//wzx//Desktop//result.bmp", PIC_HEIGH, PIC_WIDTH);
}
C rgb565转rgb888相关推荐
- argb888与rgb888转换程序_一文了解各平台RGB565和RGB888区别
原标题:一文了解各平台RGB565和RGB888区别 用过AM335x平台的小伙伴应该知道,OK335xS开发平台的LCD接口是RGB888模式的,而OK335xD开发平台的LCD接口是RGB565模 ...
- RGB565 与 RGB888的相互转换
本文内容不是完全原创,参考了网上部分精华,做了整理. RGB色彩模式(也翻译为"红绿蓝",比较少用)是工业界的一种颜色标准,是通过对红(R).绿(G).蓝(B) 三个颜色通道的变化 ...
- 转: RGB565、RGB888互相转换原理和代码
转:http://www.xuebuyuan.com/935987.html 背景:在我们的计算机中图像是以RGB888格式显示图像的,24位图每个像素保存了32bit的数据,即RGB888+Alph ...
- libjpeg库的简单使用,rgb565与rgb888互转,以及色块的寻找
最近用的摄像头OV2640摄像头,支持RGB565.JPEG.YUV和YCbCr格式的输出,想要对采集的图像进行色块识别,这样一般需要用到RGB格式的输出会比较好处理,数字图像处理中常用的采用模型是R ...
- Linux驱动开发之RGB565转RGB888
一.前言 在前面介绍FrameBuffer子系统曾说过一帧的概念:"我们将铺满一个lcd屏幕的数据称为一帧". 那么,在每一帧数据中又由许多个像素点构成. 这些像素点就是本文的正题 ...
- RGB565转RGB888原理 (MATLAB代码)
项目里用了OV2640摄像头,传感器采集了数据后是以RGB565的形式存在的,后面还要对其做数据处理才能还原原彩色图像,那么什么是RGB565,什么是RGB888呢?来看图. 这下明白了吗?就是拆开原 ...
- 一文了解各平台RGB565和RGB888区别
用过AM335x平台的小伙伴应该知道,飞凌嵌入式OK335xS开发平台的LCD接口是RGB888模式的,而飞凌的OK335xD开发平台的LCD接口是RGB565模式的.如果把xS的镜像烧写到xD平台上 ...
- RGB565和RGB888的转换
(1)RGB565或RGB16格式说明 RGB565彩色模式也称RGB16彩色模式,指的是用16位表示一个像素,即 一个像素占两个字节, 其中:第一个字节的前5位用来表示R(Red),第一个字节的后三 ...
- RGB565 与RGB888的区别
正常的RGB24是由24位即3个字节来描述一个像素,R.G.B各8位.而实际使用中为了减少图像数据的尺寸,如视频领域,对R.G.B所使用的位数进行的缩减,如你所说的RGB565和RGB555. RGB ...
- RGB565转RGB888
在arm板上cmos得到的图象格式是RGB565格式,而在opencv上处理的格式是的BGR888. RGB565用两个字节来存一个像素点,其中三个通道分别占5个,6个,5个位. BGR888用三个字 ...
最新文章
- GEO,以GSM2309041这套数据为例,找到需要的sra数据,SRX2159543
- 怎么自学python软件-你是如何自学 Python 的?
- c语言x的2取模_c语言如何取模运算
- recv返回的数据过大 易语言_高性能数据传输系统的框架设计
- Hive文件存储格式和hive数据压缩
- 如何在C/C++中动态分配二维数组
- Redis-数据结构03-跳跃表(skiplist)
- Android图片完整性检验,Android安全测试之应用完整性校验检测
- 云计算的核心技术全解读
- 毫米波雷达在人体传感器中的应用
- google 翻译错误解决方法
- C++ 长度不固定的二维数组传参
- h5移动端开发中配置真机测试
- 手机收到回复TD退订的短信,需要回复吗?今天算是搞明白了
- 存储资源调优技术——SmartDedupe智能数据重删、SmartCompression智能数据压缩技术
- 通信应用中数字上变频DUC与数字下变频DDC详细原理(带图)
- openCV实现图像的空间域增强
- OGRE 火炬之光(torchlight) 骨骼动画
- 将一组数组尽可能均匀的分成两堆,使两个堆中的数的和尽可能相等
- 快速找到python第三方库
热门文章
- 基于STM32战舰开发板的内部温度传感器实验
- python二级题库(百分之九十原题) 刷题软件推荐 第二套
- 对数周期天线工作原理
- 手机远程锁定计算机,手机怎么控制电脑 手机远程控制电脑关机方法
- ui自动化模拟键盘按键
- 在MacOS下为2K显示器开启HiDPI
- rhel7-firewalld端口转发
- tbopen链接生成工具_影视、航空行业都在用的短链接工具,免费短链接生成器?...
- 百度地图生成器,图标消失,中文乱码和自定义名字undefind
- silvaco学习笔记—— Automatic Meshing