首先先介绍C++中图像数据分配内存方法。

在计算机中图像是一个二维的数字点阵。

比较容易想到的是申请一个二维矩阵来存储图像

如:

BYTE image[512][512];

可以存储一幅512*512个像素的图像,每个像素用一个字节表示,一个字节能表示0-255共256个不同取值。所以这一二维数组比较合适存储

灰度图像。

对于

二维彩色图像,如果每个像素分别有R,G,B 3个颜色分量,则可以用如下的方式分配二维数组。

struct RGB{

BYTE r;

BYTE g;

BYTE b;

};

RGB image[512][512];

但是分配二维数组有一个致命缺点,就是不能分配占用空间较大的数组,如imgae【5000】【5000】。

所以,比较好的二维图像内存分配方法可用以下思想:

BYTE *imgae[5000];

for(int i=0;i<512;i++)

{

image[i]=new unsigned char[5000];

}

,以上代码实际就是创建一个二维数组,image[i][j]表示二维数组的第i行第j列。存储图像第i行第j列个像素。

BMP文件组成分为:

{

HEADER

BITMAPFILEHEADER

BITMAPINFOHEADER

RGBQUAD

DATA

}

以下是将.RAW 文件转为.BMP格式的程序,

#include

#include

#include

int  main()

{

FILE *fp;

FILE *fp1;

int imageW=512;

int imageH=512;

int storeW =imageW;

BITMAPFILEHEADER bh;

BITMAPINFOHEADER bInfo;//位图信息头

int i=0;

RGBQUAD rgb;

unsigned char *image[1000];//image[i] is a point

// unsigned char[512];

fp=fopen("f:\\lena.raw","rb");

if(fp==NULL)

{

printf("open lena.raw failed\n");

return 0;

}

//unsigned char *image[1000];//image[i] is a point

for(i=0;i<512;i++)

{

//image[i]=new unsigned char[512];//

image[i]=malloc(512);

fread(image[i],1,512,fp);//every row read 512 word from fp

}//after this the lena.raw's data is been read into image[][];

fclose(fp);

fp1=fopen("f:\\new.bmp","wb");

if(fp1==NULL)

{

printf("open new.bmp failed\n");

return 0;

}

if(storeW%4!=0)

{

storeW+=(4-storeW%4);//

}

// BITMAPFILEHEADER bh;//位图头文件(包含有关文件类型,大小,存放位置等信息)

bh.bfType=((WORD)('M'<<8)|'B');//"BM"说明文件类型

bh.bfReserved1=0;//保留

bh.bfReserved2=0;//保留

bh.bfSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*256 + storeW*imageH;//文件大小

bh.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*256;

//表示从头文件开始到实际图像数据数据之间的字节的偏移量。bfOffBits可以直接定位像素数据

//BITMAPINFOHEADER bInfo;//位图信息头

bInfo.biSize=sizeof(BITMAPINFOHEADER);//说明BITMAPINFOHEADER结构所需的字数

bInfo.biWidth= imageW;//图像宽度,以像素为单位

bInfo.biHeight=imageH;//图像高度,以像素为单位

bInfo.biPlanes=1;//为目标设备说明位面数,其中总是被设为1

bInfo.biBitCount=8;//说明比特数/像素的颜色深度,值为0,1,4,8,16,24或32,256灰度级的颜色深度为8,因为2^8=256

bInfo.biCompression=BI_RGB;//说明图像数据压缩类型

bInfo.biSizeImage=storeW*imageH;//说明图像的大小,一字节为单位,

bInfo.biXPelsPerMeter=0;//水平分辨率,可以设为0

bInfo.biYPelsPerMeter=0;//垂直分辨率,可以设为0

bInfo.biClrUsed=256;//说明位图实际使用的彩色表中颜色索引数

bInfo.biClrImportant=0;//说明对图像显示有重要影响的颜色索引数目,为0表示都重要。

fwrite(&bh,sizeof(BITMAPFILEHEADER),1,fp1);//把位图头文件写入新建的bmp格式文件中

fwrite(&bInfo,sizeof(BITMAPINFOHEADER),1,fp1);//位图信息头写入新建的bmp格式文件中

// RGBQUAD rgb;

rgb.rgbReserved=0;

for(i=0;i<256;i++)

{

rgb.rgbBlue=rgb.rgbRed=rgb.rgbGreen=i;

fwrite(&rgb,sizeof(RGBQUAD),1,fp1);

}

for(i=0;i<256;i++)

{

fwrite(image[511-i],1,512,fp1);//把之前获取到的图片原始数据从imge中写入新建的bmp格式文件中

}

fclose(fp1);

return 0 ;

}

C语言将raw转为bmp,Raw格式转换为Bmp格式相关推荐

  1. R语言ggplot2可视化:应用pivot_longer函数将数据从宽格式转换为长格式、为dataframe的每一列绘制密度图和直方图(堆叠)

    R语言ggplot2可视化:应用pivot_longer函数将数据从宽格式转换为长格式.为dataframe的每一列绘制密度图和直方图(堆叠) 目录 R语言ggplot2可视化:应用pivot_lon ...

  2. 如何批量将 jpeg、png、gif、bmp、webp 转换为 svg 格式

    概要:SVG 是一种可缩放的矢量图形格式.也可以说是一种开放标准的矢量图形语言,可让你设计出激动人心的.高分辨率的Web图形页面.这样用户就可以直接用代码来描绘图像,通过改变部分代码来使图像具有交互功 ...

  3. 8个数字的字符串(20191001)转为日期格式(2019-10-01);将yyyy-mm-dd格式转换为年月日格式 ;将年月日格式转换为yyyy-mm-dd格式

    [推荐插件( moment.js)moment.js的使用] 8个数字的字符串(20191001)转为日期格式(2019-10-01); //将8个数字的字符串转换为yyyy-mm-dd格式 func ...

  4. 用c语言代码将dxf格式转换为pdf格式

    将DXF格式转换为PDF格式可以使用C语言中的开源库libredwg和libharu来实现. libredwg是用于解析和提取DXF文件数据的库,它可以读取DXF文件并将其转换为内部数据结构.libh ...

  5. 将tkm格式转换为MP3格式——亲测有效

    将tkm,mgg格式转换为MP3格式 1.打开网站:音乐解锁新版 -- 音乐解锁旧版 2.将要转码的tkm格式文件拖至网页中,会自动解锁. 3.点击下载解锁成功的音乐,下载,tkm格式转为m4a,mg ...

  6. dwg怎么转换成html,如何将dwg格式转换为dat格式.doc

    如何将dwg格式转换为dat格式.doc 如何将 dwg格式转换为 dat格式 研究背景 南方 cass是针对于测量工作研发的基于 auto CAD的强大专业软件,其中一项功能就是根据坐标文件( .d ...

  7. 如何将FAT32格式转换为NTFS格式(二)

    一.FAT32转NTFS 在"运行"中输入"CMD"打开"命令提示符"窗口,输入:"CONVERT F: /FS:NTFS&quo ...

  8. TF之VGG系列:利用预先编制好的脚本data_convert .py文件将图片格式转换为tfrecord 格式

    TF之VGG系列:利用预先编制好的脚本data_convert .py文件将图片格式转换为tfrecord 格式 目录 转换代码 转换后的结果 转换代码 python data_convert2tfr ...

  9. linux java amr转mp3_本工具用于将微信语音 amr 格式转换为 mp3 格式以便在 html5 的 audio 标签中进行播放...

    音频转码工具 本工具主要用于将微信语音 amr 格式转换为 mp3 格式以便在 html5 的 audio 标签中进行播放. 支持 Linux/Windows/Mac 平台 因为是基于 JAVE 项目 ...

  10. java amr音频转码_jave: 音频转码工具,主要用于将微信语音 amr 格式转换为 mp3 格式以便在 html5 的 audio 标签中进行播放...

    音频转码工具 本工具主要用于将微信语音 amr 格式转换为 mp3 格式以便在 html5 的 audio 标签中进行播放. 支持 Linux/Windows/Mac 平台 因为是基于 JAVE 项目 ...

最新文章

  1. android jni研究
  2. 调用iOS系统本地相册或摄像头
  3. 这10篇 iOS 热文,你别错过哦
  4. IOS-字符串太长换行拼接
  5. 华为南太无线解决方案部梁旭阳_华为无线充电新专利:激光无线充电,替代传统半接触式...
  6. 关于客户端无法获得服务器端GP服务(Geoprocessing Service)结果的解决办法
  7. linux runqueue定义,Linux中多CPU的runqueue及抢占
  8. layuit 框架_Layui|经典模块化前端框架
  9. Sublime Text 3 如何配置Python环境及安装插件?
  10. micropython websocket_通过websocket登录ESP32
  11. IoTDB常用的SQL语句大全
  12. Dr.com哆点客户端本地密码查看
  13. x86_64 x86 amd64 i386 i686 aarch64等词语含义
  14. 完全删除conime.exe
  15. Windows重新安装系统后安装软件步骤
  16. 数字图像处理课程作业1-大米检测
  17. win10 外接usb摄像头_win10系统外接usb摄像头怎么打开
  18. 打开计算机窗口的控制菜单,打开控制面板的几种方法
  19. 国美易卡不需要扩展,国美易卡系统维护复杂
  20. 随机游走 推荐系统论文阅读

热门文章

  1. 百度wz竞价推广关键词排名的影响因素大全
  2. 中国脑计划颠覆性创新之路二,欧美脑计划存在重大缺陷
  3. js 让鼠标右下角有一排小字_JS实现跟随鼠标的链接文字提示框效果
  4. 南阳oj S + T
  5. html视频外链地址,HTML第三方视频链接使用以及属性.docx
  6. 怎样将tiff格式转成jpg或png?
  7. vtune下载 windows_VtuneApi32e.dll
  8. 智能优化算法:蝗虫优化算法-附代码
  9. sql查看mysql表结构_MySQL 查看表结构简单命令
  10. 不定式和动名词复合结构是什么