C语言将raw转为bmp,Raw格式转换为Bmp格式
首先先介绍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格式相关推荐
- R语言ggplot2可视化:应用pivot_longer函数将数据从宽格式转换为长格式、为dataframe的每一列绘制密度图和直方图(堆叠)
R语言ggplot2可视化:应用pivot_longer函数将数据从宽格式转换为长格式.为dataframe的每一列绘制密度图和直方图(堆叠) 目录 R语言ggplot2可视化:应用pivot_lon ...
- 如何批量将 jpeg、png、gif、bmp、webp 转换为 svg 格式
概要:SVG 是一种可缩放的矢量图形格式.也可以说是一种开放标准的矢量图形语言,可让你设计出激动人心的.高分辨率的Web图形页面.这样用户就可以直接用代码来描绘图像,通过改变部分代码来使图像具有交互功 ...
- 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 ...
- 用c语言代码将dxf格式转换为pdf格式
将DXF格式转换为PDF格式可以使用C语言中的开源库libredwg和libharu来实现. libredwg是用于解析和提取DXF文件数据的库,它可以读取DXF文件并将其转换为内部数据结构.libh ...
- 将tkm格式转换为MP3格式——亲测有效
将tkm,mgg格式转换为MP3格式 1.打开网站:音乐解锁新版 -- 音乐解锁旧版 2.将要转码的tkm格式文件拖至网页中,会自动解锁. 3.点击下载解锁成功的音乐,下载,tkm格式转为m4a,mg ...
- dwg怎么转换成html,如何将dwg格式转换为dat格式.doc
如何将dwg格式转换为dat格式.doc 如何将 dwg格式转换为 dat格式 研究背景 南方 cass是针对于测量工作研发的基于 auto CAD的强大专业软件,其中一项功能就是根据坐标文件( .d ...
- 如何将FAT32格式转换为NTFS格式(二)
一.FAT32转NTFS 在"运行"中输入"CMD"打开"命令提示符"窗口,输入:"CONVERT F: /FS:NTFS&quo ...
- TF之VGG系列:利用预先编制好的脚本data_convert .py文件将图片格式转换为tfrecord 格式
TF之VGG系列:利用预先编制好的脚本data_convert .py文件将图片格式转换为tfrecord 格式 目录 转换代码 转换后的结果 转换代码 python data_convert2tfr ...
- linux java amr转mp3_本工具用于将微信语音 amr 格式转换为 mp3 格式以便在 html5 的 audio 标签中进行播放...
音频转码工具 本工具主要用于将微信语音 amr 格式转换为 mp3 格式以便在 html5 的 audio 标签中进行播放. 支持 Linux/Windows/Mac 平台 因为是基于 JAVE 项目 ...
- java amr音频转码_jave: 音频转码工具,主要用于将微信语音 amr 格式转换为 mp3 格式以便在 html5 的 audio 标签中进行播放...
音频转码工具 本工具主要用于将微信语音 amr 格式转换为 mp3 格式以便在 html5 的 audio 标签中进行播放. 支持 Linux/Windows/Mac 平台 因为是基于 JAVE 项目 ...
最新文章
- android jni研究
- 调用iOS系统本地相册或摄像头
- 这10篇 iOS 热文,你别错过哦
- IOS-字符串太长换行拼接
- 华为南太无线解决方案部梁旭阳_华为无线充电新专利:激光无线充电,替代传统半接触式...
- 关于客户端无法获得服务器端GP服务(Geoprocessing Service)结果的解决办法
- linux runqueue定义,Linux中多CPU的runqueue及抢占
- layuit 框架_Layui|经典模块化前端框架
- Sublime Text 3 如何配置Python环境及安装插件?
- micropython websocket_通过websocket登录ESP32
- IoTDB常用的SQL语句大全
- Dr.com哆点客户端本地密码查看
- x86_64 x86 amd64 i386 i686 aarch64等词语含义
- 完全删除conime.exe
- Windows重新安装系统后安装软件步骤
- 数字图像处理课程作业1-大米检测
- win10 外接usb摄像头_win10系统外接usb摄像头怎么打开
- 打开计算机窗口的控制菜单,打开控制面板的几种方法
- 国美易卡不需要扩展,国美易卡系统维护复杂
- 随机游走 推荐系统论文阅读