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相关推荐

  1. argb888与rgb888转换程序_一文了解各平台RGB565和RGB888区别

    原标题:一文了解各平台RGB565和RGB888区别 用过AM335x平台的小伙伴应该知道,OK335xS开发平台的LCD接口是RGB888模式的,而OK335xD开发平台的LCD接口是RGB565模 ...

  2. RGB565 与 RGB888的相互转换

    本文内容不是完全原创,参考了网上部分精华,做了整理. RGB色彩模式(也翻译为"红绿蓝",比较少用)是工业界的一种颜色标准,是通过对红(R).绿(G).蓝(B) 三个颜色通道的变化 ...

  3. 转: RGB565、RGB888互相转换原理和代码

    转:http://www.xuebuyuan.com/935987.html 背景:在我们的计算机中图像是以RGB888格式显示图像的,24位图每个像素保存了32bit的数据,即RGB888+Alph ...

  4. libjpeg库的简单使用,rgb565与rgb888互转,以及色块的寻找

    最近用的摄像头OV2640摄像头,支持RGB565.JPEG.YUV和YCbCr格式的输出,想要对采集的图像进行色块识别,这样一般需要用到RGB格式的输出会比较好处理,数字图像处理中常用的采用模型是R ...

  5. Linux驱动开发之RGB565转RGB888

    一.前言 在前面介绍FrameBuffer子系统曾说过一帧的概念:"我们将铺满一个lcd屏幕的数据称为一帧". 那么,在每一帧数据中又由许多个像素点构成. 这些像素点就是本文的正题 ...

  6. RGB565转RGB888原理 (MATLAB代码)

    项目里用了OV2640摄像头,传感器采集了数据后是以RGB565的形式存在的,后面还要对其做数据处理才能还原原彩色图像,那么什么是RGB565,什么是RGB888呢?来看图. 这下明白了吗?就是拆开原 ...

  7. 一文了解各平台RGB565和RGB888区别

    用过AM335x平台的小伙伴应该知道,飞凌嵌入式OK335xS开发平台的LCD接口是RGB888模式的,而飞凌的OK335xD开发平台的LCD接口是RGB565模式的.如果把xS的镜像烧写到xD平台上 ...

  8. RGB565和RGB888的转换

    (1)RGB565或RGB16格式说明 RGB565彩色模式也称RGB16彩色模式,指的是用16位表示一个像素,即 一个像素占两个字节, 其中:第一个字节的前5位用来表示R(Red),第一个字节的后三 ...

  9. RGB565 与RGB888的区别

    正常的RGB24是由24位即3个字节来描述一个像素,R.G.B各8位.而实际使用中为了减少图像数据的尺寸,如视频领域,对R.G.B所使用的位数进行的缩减,如你所说的RGB565和RGB555. RGB ...

  10. RGB565转RGB888

    在arm板上cmos得到的图象格式是RGB565格式,而在opencv上处理的格式是的BGR888. RGB565用两个字节来存一个像素点,其中三个通道分别占5个,6个,5个位. BGR888用三个字 ...

最新文章

  1. GEO,以GSM2309041这套数据为例,找到需要的sra数据,SRX2159543
  2. 怎么自学python软件-你是如何自学 Python 的?
  3. c语言x的2取模_c语言如何取模运算
  4. recv返回的数据过大 易语言_高性能数据传输系统的框架设计
  5. Hive文件存储格式和hive数据压缩
  6. 如何在C/C++中动态分配二维数组
  7. Redis-数据结构03-跳跃表(skiplist)
  8. Android图片完整性检验,Android安全测试之应用完整性校验检测
  9. 云计算的核心技术全解读
  10. 毫米波雷达在人体传感器中的应用
  11. google 翻译错误解决方法
  12. C++ 长度不固定的二维数组传参
  13. h5移动端开发中配置真机测试
  14. 手机收到回复TD退订的短信,需要回复吗?今天算是搞明白了
  15. 存储资源调优技术——SmartDedupe智能数据重删、SmartCompression智能数据压缩技术
  16. 通信应用中数字上变频DUC与数字下变频DDC详细原理(带图)
  17. openCV实现图像的空间域增强
  18. OGRE 火炬之光(torchlight) 骨骼动画
  19. 将一组数组尽可能均匀的分成两堆,使两个堆中的数的和尽可能相等
  20. 快速找到python第三方库

热门文章

  1. 基于STM32战舰开发板的内部温度传感器实验
  2. python二级题库(百分之九十原题) 刷题软件推荐 第二套
  3. 对数周期天线工作原理
  4. 手机远程锁定计算机,手机怎么控制电脑 手机远程控制电脑关机方法
  5. ui自动化模拟键盘按键
  6. 在MacOS下为2K显示器开启HiDPI
  7. rhel7-firewalld端口转发
  8. tbopen链接生成工具_影视、航空行业都在用的短链接工具,免费短链接生成器?...
  9. 百度地图生成器,图标消失,中文乱码和自定义名字undefind
  10. silvaco学习笔记—— Automatic Meshing