收藏 分享(赏)

位图rgb到gray.doc

上传人:myw993772 文档编号:7078569 上传时间:2019-05-05 格式:DOC 页数:6 大小:251.50KB
下载 相关 举报
位图rgb到gray.doc_第1页
第1页 / 共6页
位图rgb到gray.doc_第2页
第2页 / 共6页
位图rgb到gray.doc_第3页
第3页 / 共6页
位图rgb到gray.doc_第4页
第4页 / 共6页
位图rgb到gray.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

1、* 打开和保存 bmp 文件,这里使用自定义数据结构 Bitmap,相关函数定义如下:bmp.h:int CreateBitmap(Bitmap* bmp, int width, int height, int bitCount);void ReleaseBitmap(Bitmap* bmp);int CheckPath(char *path);int ReadBitmap(char* path, Bitmap* bmp);int SaveBitmap(char* path, Bitmap* bmp);* 图像格式转换 basicprocess.h:int RGB2Gray(Bitmap* s

2、rc, Bitmap* dst);int Gray2RGB(Bitmap* src, Bitmap* dst);6 *- File Info -29 * 位图文件结构及基本函数定义 打开和保存 bmp 文件31 typedef unsigned short WORD;32 typedef unsigned long DWORD;33 typedef long LONG;34 typedef unsigned char BYTE;* 位图文件头结构 14字节 */37 typedef struct tagBITMAPFILEHEADER 38 WORD bfType; DWORD bfSize;

3、WORD bfReserved1;WORD bfReserved2; DWORD bfOffBits;43 BITMAPFILEHEADER;45 /* 位图信息头结构 40字节 */46 typedef struct tagBITMAPINFOHEADER 47 DWORD biSize; / 结构长度 40BLONG biWidth;LONG biHeight;WORD biPlanes; / 151 WORD biBitCount; / 表示颜色要用到的位数52 DWORD biCompression; / 压缩格式53 DWORD biSizeImage; / 位图占用字节数=biWi

4、dth(4的整倍数)*biHeight54 LONG biXPelsPerMeter; / 水平分辨率55 LONG biYPelsPerMeter; / 垂直分辨率56 DWORD biClrUsed; / 本图像用到的颜色数 DWORD biClrImportant; / 本图像的重要颜色数58 BITMAPINFOHEADER;60 /* 调色板 4字节 */61 typedef struct tagRGBQUAD 62 BYTE rgbBlue;BYTE rgbGreen;BYTE rgbRed;BYTE rgbReserved; RGBQUAD;68 /* 定义图像信息 */69 t

5、ypedef struct tagBITMAPINFO 70 BITMAPINFOHEADER bmiHeader;71 RGBQUAD bmiColors1;72 BITMAPINFO;74 /* 定义位图图像 */75 typedef struct _Bitmap76 77 BITMAPFILEHEADER bmfh; BITMAPINFOHEADER bmih;79 int width;int height;int bitCount; / 8 或者24 int imageSize; / 图像数据大小(imageSize=height*widthStep)字节83 BYTE* imageD

6、ata;/排列的图像数据84 int widthStep; /排列的图像行大小85 Bitmap;88 * 位图创建函数 创建一个 Bitmap 结构,并为图像数据分配空间90 * 使用方法:91 * Bitmap *bmp=(Bitmap*)malloc(sizeof(Bitmap);92 * ret=CreateBitmap(bmp,50,50,3);94 int CreateBitmap(Bitmap* bmp, int width, int height, int bitCount)bmp-width=width;bmp-height=height;bmp-bmih.biWidth=w

7、idth;bmp-bmih.biHeight=height;bmp-widthStep=(int)(width*bitCount+31)/32)*4; /计算排列的宽度bmp-imageSize=bmp-height*bmp-widthStep*sizeof(BYTE);/计算排列的图像大小if(bitCount=8)bmp-bitCount=8;bmp-bmfh.bfType=0x4d42; /注意是4d42 等等else if (bitCount=24)处理 else printf(“Error(CreateBitmap): only supported 8 or 24 bits bitm

8、ap.n“);return -1; bmp-imageData=(BYTE*)malloc(bmp-imageSize); /分配数据空间if(!(bmp-imageData)printf(“Error(CreateBitmap): can not allocate bitmap memory.n“);return -1; return 0;* 位图指针释放函数 释放位图数据空间* 使用方法: ReleaseBitmap(bmp);163 void ReleaseBitmap(Bitmap* bmp)free(bmp-imageData); bmp-imageData=NULL; free(b

9、mp);bmp=NULL;* 路径检查函数:是否为 BMP 文件,是否可读* 正确返回0,错误返回-1使用方法 ret=CheckPath(path);int CheckPath(char *path)FILE *fd;int len = strlen(path) / sizeof(char);char ext3;/check whether the path include the characters “bmp“ at endstrncpy(ext, if (!(ext0 = b return -1;/check whether the file can be read or notfd

10、= fopen(path, “r“);if (!fd) printf(“Error(CheckPath): can not open the file.n“);return -1; fclose(fd);return 0;* 从文件中读取位图函数* 正确返回0,错误返回-1* 使用方法:bmp=(Bitmap*)malloc(sizeof(Bitmap);* ret=ReadBitmap(path, bmp);210 int ReadBitmap(char* path, Bitmap* bmp)211 int ret; FILE *fd;/检查路径是否可读216 ret=CheckPath(p

11、ath);217 if(ret=-1)218 219 printf(“Error(ReadBitmap): the path of the image is invalid.n“);220 return -1;/打开文件224 fd=fopen(path,“rb“);225 if(fd=0)226 printf(“Error(ReadBitmap): can not open the image.n“);228 return -1; /读取文件信息头 14字节232 fread(/读取位图信息头 40字节239 fread(251 /创建位图结构252 ret=CreateBitmap(bmp

12、, bmp-bmih.biWidth, bmp-bmih.biHeight, bmp-bmih.biBitCount);253 if(ret=-1)254 printf(“Error(CreateBitmap): can not CreateBitmap.n“);256 return -1; /读取图像数据/由于4字节对齐格式261 fseek(fd,bmp-bmfh.bfOffBits,SEEK_SET); /定位到图像数据区262 ret=fread(bmp-imageData,bmp-imageSize,1,fd);263 if(ret=0)264 if(feof(fd) /if the

13、 file pointer point to the end of the file266 268 if(ferror(fd) /if error happened while read the pixel data269 printf(“Error(ReadBitmap): can not read the pixel data.n“);271 fclose(fd);272 return -1;276 /关闭文件 fclose(fd);return 0;282 * 保存位图到文件中去283 * 正确返回0,错误返回-1 使用方法:286 * bmp=(Bitmap*)malloc(sizeo

14、f(Bitmap);287 * ret=SaveBitmap(path, bmp);289 int SaveBitmap(char* path, Bitmap* bmp)290 291 int ret;292 FILE *fd;293294 /检查路径是否正确295 int len = strlen(path) / sizeof(char);296 char ext3;297 /check whether the path include the characters “bmp“ at end298 strncpy(ext, 299 if (!(ext0 = b 302 return -1;3

15、03 305 /打开文件306 fd=fopen(path,“wb“);307 if(fd=0)308 309 printf(“Error(SaveBitmap): can not open the image.n“);310 return -1;311 313 /保存文件信息头 14字节314 fwrite(/保存位图信息头 40字节321 fwrite(/如果为8位,则 保存调色板334 RGBQUAD pal256;335 int i;336 if(bmp-bitCount=8)337 338 for(i=0;iimageData,bmp-imageSize,1,fd);355 if(r

16、et!=1)356 357 printf(“Error(SaveBitmap): can not save the pixel data.n“);358 return -1;359 /关闭文件 fclose(fd); return 0;#endif/ BMP_H_INCLUDED379 * File name: basicprocess.h381 * Last Version: 1.0382 * Descriptions: 位图图像基本处理函数 图像格式转换392 #ifndef BASICPROCESS_H_393 #define BASICPROCESS_H_395 #include “b

17、mp.h“396 #include 398 * 位图图像基本处理函数 图像格式转换400 int RGB2Gray(Bitmap* src, Bitmap* dst)401 402 int ret;403 int n=0,i,j;404 BYTE r,g,b,gray;406 /检查图像格式是否合法407 if(src-bitCount!=24)408 409 printf(“Error(RGB2Gray): the source image must be in RGB format.n“);410 return -1;413 /为 dst 图像分配数据空间414 ret=CreateBit

18、map(dst,src-width,src-height,8);415 if(ret=-1)416 417 printf(“Error(RGB2Gray): cant create target image.n“);418 return -1;419 /计算灰度数据422 for(i=0;iheight;i+)423 424 n=0;425 for(j=0;jwidth*3;j+,n+)426 427 b=*(src-imageData+src-widthStep*(src-height-1-i)+j);428 j+;429 g=*(src-imageData+src-widthStep*(s

19、rc-height-1-i)+j);430 j+;431 r=*(src-imageData+src-widthStep*(src-height-1-i)+j);432 gray=(r*19595 + g*38469 + b*7472) 16;433 *(dst-imageData+dst-widthStep*(dst-height-1-i)+n)=gray;434 437 return 0;441 * Gray2RGB443 * 使用方法:444 * bmp=(Bitmap*)malloc(sizeof(Bitmap);445 * ret=ReadBitmap(path, bmp);446

20、* dstbmp=(Bitmap*)malloc(sizeof(Bitmap);447 * ret=Gray2RGB(bmp,dstbmp);int Gray2RGB(Bitmap* src, Bitmap* dst) int ret; int n=0,i,j; BYTE r;/检查图像格式是否合法456 if(src-bitCount!=8)457 458 printf(“Error(Gray2RGB): the source image must be in gray scale.n“);459 return -1;462 /为 dst 图像分配数据空间463 ret=CreateBitm

21、ap(dst,src-width,src-height,24);464 if(ret=-1)465 466 printf(“Error(Gray2RGB): cant create target image.n“);467 return -1;/计算灰度数据471 for(i=0;iheight;i+)472 n=0;474 for(j=0;jwidth;j+,n+)475 r=*(src-imageData+src-widthStep*(src-height-1-i)+j);477 *(dst-imageData+dst-widthStep*(dst-height-1-i)+n)=r;478 n+;479 *(dst-imageData+dst-widthStep*(dst-height-1-i)+n)=r;480 n+;481 *(dst-imageData+dst-widthStep*(dst-height-1-i)+n)=r; return 0;

展开阅读全文
相关资源
猜你喜欢
  • 2018年秋江西省新版北师大版八年级数学下册练习课件:第三章图形的平移与旋转3.4简单的图案设计.ppt 2018年秋江西省新版北师大版八年级数学下册练习课件:第三章图形的平移与旋转3.4简单的图案设计.ppt
  • 2018年秋江西省新版北师大版八年级数学下册练习课件:第二章一元一次不等式和一元一次不等式组2.3不等式的解集.ppt 2018年秋江西省新版北师大版八年级数学下册练习课件:第二章一元一次不等式和一元一次不等式组2.3不等式的解集.ppt
  • 2018年秋江西省新版北师大版八年级数学下册练习课件:第二章一元一次不等式和一元一次不等式组2.4一元一次不等式第2课时一元一次不等式的应用.ppt 2018年秋江西省新版北师大版八年级数学下册练习课件:第二章一元一次不等式和一元一次不等式组2.4一元一次不等式第2课时一元一次不等式的应用.ppt
  • 2018年秋江西省新版北师大版八年级数学下册练习课件:第二章一元一次不等式和一元一次不等式组2.5一元一次不等式与一次函数第1课时一元一次不等式与一次函数的关系.ppt 2018年秋江西省新版北师大版八年级数学下册练习课件:第二章一元一次不等式和一元一次不等式组2.5一元一次不等式与一次函数第1课时一元一次不等式与一次函数的关系.ppt
  • 2018年秋江西省新版北师大版八年级数学下册练习课件:第二章一元一次不等式和一元一次不等式组2.4一元一次不等式第1课时一元一次不等式的解法.ppt 2018年秋江西省新版北师大版八年级数学下册练习课件:第二章一元一次不等式和一元一次不等式组2.4一元一次不等式第1课时一元一次不等式的解法.ppt
  • 2018年秋江西省新版北师大版八年级数学下册练习课件:第二章一元一次不等式和一元一次不等式组2.5一元一次不等式与一次函数第2课时一元一次不等式与一次函数的综合应用.ppt 2018年秋江西省新版北师大版八年级数学下册练习课件:第二章一元一次不等式和一元一次不等式组2.5一元一次不等式与一次函数第2课时一元一次不等式与一次函数的综合应用.ppt
  • 2018年秋江西省新版北师大版八年级数学下册练习课件:第二章一元一次不等式和一元一次不等式组2.6一元一次不等式组第1课时一元一次不等式组的解法1.ppt 2018年秋江西省新版北师大版八年级数学下册练习课件:第二章一元一次不等式和一元一次不等式组2.6一元一次不等式组第1课时一元一次不等式组的解法1.ppt
  • 2018年秋江西省新版北师大版八年级数学下册练习课件:第五章分式与分式方程5.4分式方程第2课时分式方程的解法.ppt 2018年秋江西省新版北师大版八年级数学下册练习课件:第五章分式与分式方程5.4分式方程第2课时分式方程的解法.ppt
  • 2018年秋江西省新版北师大版八年级数学下册练习课件:第五章分式与分式方程5.3分式的加减法第1课时同分母分式的加减.ppt 2018年秋江西省新版北师大版八年级数学下册练习课件:第五章分式与分式方程5.3分式的加减法第1课时同分母分式的加减.ppt
  • 相关搜索
    资源标签

    当前位置:首页 > 企业管理 > 管理学资料

    本站链接:文库   一言   我酷   合作


    客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

    经营许可证编号: 粤ICP备2021046453号世界地图

    道客多多©版权所有2020-2025营业执照举报