CUDA学习——BMP文件格式

现在开始学习有关数字图像处理部分,首先接触的是BMP图像。

      刚开始以为很多有关图像格式的定义需要自己来完成,后来才知道,这些已经被包含在内库中了,感觉比较方便。
      首先介绍一下BMP图像的文件格式:
            位图文件头->文图信息头->彩色表->位图数据。


      以下源代码是《数字图像处理实训教程》中有关raw数据到bmp格式的转换,是八位的bmp图像。
#include <stdio.h>
#include <Windows.h>

int main()
{
 //打开lena.raw文件
 FILE* fp=fopen("d://lena.raw","rb");
 if (fp==NULL)
 {
  printf("can not open file lena.raw");
  return 0;
 }

 unsigned char* image[1000];

 //申请512字节的内存空间,把起始地址赋给image[i]
 for (int i=0;i<512;++i)
 {
  image[i]=new unsigned char[512];
  fread(image[i],1,512,fp);
 }

 fclose(fp);

 //**************************************************
 //这里可以加入有关图像处理的函数(尝试用cuda实现)
 //**************************************************

 FILE *fp1=fopen("d://new.bmp","wb");
 if (fp1==NULL)
 {
  printf("can not open new.bmp/n");
  return 0;
 }

 int imageW=512;
 int imageH=512;
 int storeW=imageW;
 
 //每一行的字节数必需是4的整数倍,就是与DWORD对其,所有填充imageW
 if (storeW%4!=0)
 {
  storeW+=(4-storeW%4);
 }

 BITMAPFILEHEADER bh;
 bh.bfType=((WORD)('M'<<8)|'B');
 bh.bfSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*256+storeW*imageH;
 bh.bfReserved1=0;
 bh.bfReserved2=0;
 bh.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*256;

 BITMAPINFOHEADER bInfo;
 bInfo.biSize=sizeof(BITMAPINFOHEADER);
 bInfo.biWidth=imageW;
 bInfo.biHeight=imageH;
 bInfo.biPlanes=1;
 bInfo.biBitCount=8;
 bInfo.biCompression=BI_RGB;
 bInfo.biSizeImage=storeW*imageH;
 bInfo.biXPelsPerMeter=0;
 bInfo.biYPelsPerMeter=0;
 bInfo.biClrUsed=256;
 bInfo.biClrImportant=0;

 fwrite(&bh,sizeof(BITMAPFILEHEADER),1,fp1);
 fwrite(&bInfo,sizeof(BITMAPINFOHEADER),1,fp1);

 RGBQUAD rgb;

 rgb.rgbReserved=0;
 for (int i=0;i<256;++i)
 {
  rgb.rgbBlue=rgb.rgbGreen=rgb.rgbRed=i;
  fwrite(&rgb,sizeof(RGBQUAD),1,fp1);
 }

 for (int i=0;i<512;++i)
 {
  fwrite(image[511-i],1,512,fp1);
 }

 fclose(fp1);

}

 

感觉代码有点小问题,虽然能够运行成功,但是分配的很多内存都没有释放。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值