bmp图像处理

合集下载

C语言 BMP图片处理

C语言 BMP图片处理

C语言BMP图片处理BMP是bitmap的缩写形式,bitmap顾名思义,就是位图也即Windows位图。

它一般由4部分组成:文件头信息块、图像描述信息块、颜色表(在真彩色模式无颜色表)和图像数据区组成。

在系统中以BMP为扩展名保存。

打开Windows的画图程序,在保存图像时,可以看到三个选项:2色位图(黑白)、16色位图、256色位图和24位位图。

这是最普通的生成位图的工具,在这里讲解的BMP位图形式,主要就是指用画图生成的位图(当然,也可以用其它工具软件生成)。

现在讲解BMP的4个组成部分:1.文件头信息块0000-0001:文件标识,为字母ASCII码“BM”。

0002-0005:文件大小。

0006-0009:保留,每字节以“00”填写。

000A-000D:记录图像数据区的起始位置。

各字节的信息依次含义为:文件头信息块大小,图像描述信息块的大小,图像颜色表的大小,保留(为01)。

2.图像描述信息块000E-0011:图像描述信息块的大小,常为28H。

0012-0015:图像宽度。

0016-0019:图像高度。

001A-001B:图像的plane(平面?)总数(恒为1)。

001C-001D:记录像素的位数,很重要的数值,图像的颜色数由该值决定。

001E-0021:数据压缩方式(数值位0:不压缩;1:8位压缩;2:4位压缩)。

0022-0025:图像区数据的大小。

0026-0029:水平每米有多少像素,在设备无关位图(.DIB)中,每字节以00H 填写。

002A-002D:垂直每米有多少像素,在设备无关位图(.DIB)中,每字节以00H 填写。

002E-0031:此图像所用的颜色数,如值为0,表示所有颜色一样重要。

3.颜色表颜色表的大小根据所使用的颜色模式而定:2色图像为8字节;16色图像位64字节;256色图像为1024字节。

其中,每4字节表示一种颜色,并以B(蓝色)、G(绿色)、R(红色)、alpha(像素的透明度值,一般不需要)。

浅谈图像处理与BMP图像文件格式

浅谈图像处理与BMP图像文件格式

浅谈图像处理与BMP图像文件格式
宋亮;陈瑜轩
【期刊名称】《电子设计工程》
【年(卷),期】2014(22)7
【摘要】数字图像处理又称为计算机图像处理,它是指将图像信号转换成数字信号并利用计算机对其进行处理的过程.数字图像处理是许多学科的重要基础,广泛应用于军事、气象、交通等领域.本文介绍了图像处理的基本概念及BMP图像文件格式并对图像处理技术的国内外发展情况进行了介绍.
【总页数】4页(P188-190,193)
【作者】宋亮;陈瑜轩
【作者单位】海军装备部陕西西安710043;中国航空计算技术研究所陕西西安710068
【正文语种】中文
【中图分类】TN709
【相关文献】
1.基于BMP位图的簇绒机花型图像处理技术初探 [J], 李文博;强少卫
2.图像处理与图像文件格式 [J], 易尧华
3.对bmp和spt图像文件格式的分析以及它们的使用 [J], 鄢宇鸿;吴建南
4.对bmp和spt图像文件格式的分析以及它们的使用 [J], 鄢宇鸿;吴建南
5.基于标准图像文件格式的数字图像处理方法 [J], 韩晓军;苗长云;王亚青
因版权原因,仅展示原文概要,查看原文内容请购买。

图像处理Bmp文件存储顺序

图像处理Bmp文件存储顺序

读写Bmp文件的方法步骤:读:1.读方式打开文件2.读入BITMAPFILEHEADER结构3.读入BITMAPINFOHEADER结构4.读入颜色表RGBQUAD结构5.读入位图数据6.关闭文件写:1.写方式打开文件2.填写BITMAPFILEHEADER结构并写入文件3.写入BITMAPINFHEADER结构并写入文件4.写颜色表进文件5.写位图数据进文件6.关闭文件①:位图文件头BITMAPFILEHEADER: (14字节)bfType :位图文件类型(0x4D42)bfSize :位图文件大小bfReserved1: Windows保留字1bfReserved2: Windows保留字2bfOffBits: 从文件头到实际位图数据的偏移字节数=文件头+ 信息头+调色板长度。

②:位图信息头(40字节)biSize: 本结构长度为40字节biWidth: 位图宽度,(像素为单位)biHeight: 位图的高度,(像素为单位)biPlanes: 设为1biCount: 位深度biCompression: 为0:不压缩;1:8位压缩;2:4位压缩。

biSizeImage:实际的位图数据占用的字节数biXPelsPerMeter:水平分辨率(像素/米)biYPelPerMeter: 垂直分辨率(像素/米)biClrCount:位图实际用到的颜色数(为0时,颜色数为2的biBitCount次幂)biClrImportant:位图显示过程中重要的颜色数(0:都是重要的)③:颜色表(4字节)rgbBlue:蓝色分量rgbGreen:绿色分量rgbRed: 红色分量rgbReserved:保留字节颜色表的大小:二值图像:大小=2*sizeof(RGBQUAD)=88位灰度图像:大小= 256*sizeof(RGBQUAD)= 102424位真彩色图像无颜色表④位图数据8位灰度图像ColorTablesize = 1024;lineByte =(bmpWidth * biBitCount / 8 + 3)/4 *4;1.申请位图文件头结构变量,并填写文件头信息BITMAPFILEHEADER fileHeader;fileHead.bfType = 0x4D42; //bmp类型//bfSize是图像文件4个组成部分之和fileHeader.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAOINFOHEADER) + ColorTablesize + lineByte*Height;fileHeader.bfReserved1 = 0;fileHeader.bfReserved2 = 0;//bfOffBits是图像文件前3部分所需空间之和fileHead.bfOffBits = 54 + ColorTablesize;2.申请位图信息头结构变量,填写信息头信息BITMAPINFOHEADER head;head.biBitCount = biBitCount;head.biClrImportant = 0;head.biClrUsed = 0;head.biCompression = 0;head.biHeight = height;head.biSize = 40;head.biSizeImage = lineByte * height;head.biWidth = width;head.biXPelsPerMeter = 0;head.biYPelsPerMete = 0;3.写灰度图像的颜色表4.写位图数据进文件调色板句柄HPALETTE文件头指针LPBITMAFILEHEADER : m_lpDib信息头指针LPBITMAPINFOHEADER :m_lpBmpInfoHead 颜色表LPRGBQUAD : m_lpColorTable 信息指针LPBITMAPINFO :m_lpBmpInfo图像数据指针:m_pImgData (包括:信息头指针和颜色表)1读入一幅图像(即打开操作):将四部分都考虑进去(1,2,3,4);2写入一幅图像(即保存操作):将四部分都考虑进去(1,2,3,4)3显示一幅图像:只需将3部分考虑进去(2,3,4)4 处理一幅图像:只需将3部分考虑进去(2,3,4)位图显示和数据处理:将(位图信息头、颜色表)即:信息指针内容,位图数据指针依次写入,并进行操作。

BMP图像分割C语言程序

BMP图像分割C语言程序

} fseek(fp1,sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER),S EEK_SET); fseek(fp2,sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER),S EEK_SET); for(i=0;i<255;i++) { fread(&pal[i].rgbBlue,1,1,fp1); fread(&pal[i].rgbGreen,1,1,fp1); fread(&pal[i].rgbRed,1,1,fp1); pal[i].rgbReserved=0; } line_bytes1=(biWidth1*biBitCount1+31)/32*4; line_bytes2=(biWidth2*biBitCount2+31)/32*4; pixel1=(BYTE*)malloc(biHeight1*line_bytes1*sizeof(BYTE)); memset(pixel1,0,biHeight1*line_bytes1*sizeof(BYTE)); if(pixel1==0) { printf("Fail to allocate memory to File one.\n"); fclose(fp1); fclose(fp2); return 1; } pixel2=(BYTE*)malloc(biHeight2*line_bytes2*sizeof(BYTE)); memset(pixel2,0,biHeight2*line_bytes2*sizeof(BYTE)); if(pixel2==0) { printf("Fail to allocate memory to File two.\n"); fclose(fp1); fclose(fp2); return 1; }

【数字图像处理】C++读取、旋转和保存bmp图像文件编程实现(彩色图)

【数字图像处理】C++读取、旋转和保存bmp图像文件编程实现(彩色图)

【数字图像处理】C++读取、旋转和保存bmp图像⽂件编程实现(彩⾊图)彩⾊图:彩⾊图的处理和灰度图略有不⼀样。

主要是像素数据不同。

由于每⾏数据的字节数必须是4的整数倍,这个地⽅处理起来要⽐灰度图⿇烦很多,多以暂时还没做好。

本程序的局限性就是只能处理尺⼨是4的整数倍的图⽚,可以旋转任意⾓度(逆时针)。

参考代码:分两个⽂件:BmpRot.h和BmpRot.cppBmpRot.h:BmpRot.cpp:23. cout<<"实际位图数据的偏移字节数:"<<pBmpHead.bfOffBits<<endl<<endl;24. }25.26. void showBmpInforHead(tagBITMAPINFOHEADER pBmpInforHead){27. cout<<"位图信息头:"<<endl;28. cout<<"结构体的长度:"<<pBmpInforHead.biSize<<endl;29. cout<<"位图宽:"<<pBmpInforHead.biWidth<<endl;30. cout<<"位图⾼:"<<pBmpInforHead.biHeight<<endl;31. cout<<"biPlanes平⾯数:"<<pBmpInforHead.biPlanes<<endl;32. cout<<"biBitCount采⽤颜⾊位数:"<<pBmpInforHead.biBitCount<<endl;33. cout<<"压缩⽅式:"<<pBmpInforHead.biCompression<<endl;34. cout<<"biSizeImage实际位图数据占⽤的字节数:"<<pBmpInforHead.biSizeImage<<endl;35. cout<<"X⽅向分辨率:"<<pBmpInforHead.biXPelsPerMeter<<endl;36. cout<<"Y⽅向分辨率:"<<pBmpInforHead.biYPelsPerMeter<<endl;37. cout<<"使⽤的颜⾊数:"<<pBmpInforHead.biClrUsed<<endl;38. cout<<"重要颜⾊数:"<<pBmpInforHead.biClrImportant<<endl;39. }40.41.42. int main(){43. char strFile[LENGTH_NAME_BMP];//bmp⽂件名44. IMAGEDATA *imagedata = NULL;//动态分配存储原图⽚的像素信息的⼆维数组45. IMAGEDATA *imagedataRot = NULL;//动态分配存储旋转后的图⽚的像素信息的⼆维数组46. int width,height;//图⽚的宽度和⾼度47. cout<<"请输⼊所要读取的⽂件名:"<<endl;48. cin>>strFile;49. FILE *fpi,*fpw;50. fpi=fopen(strFile,"rb");51. if(fpi != NULL){52. //先读取⽂件类型53. WORD bfType;54. fread(&bfType,1,sizeof(WORD),fpi);55. if(0x4d42!=bfType)56. {57. cout<<"the file is not a bmp file!"<<endl;58. return NULL;59. }60. //读取bmp⽂件的⽂件头和信息头61. fread(&strHead,1,sizeof(tagBITMAPFILEHEADER),fpi);62. //showBmpHead(strHead);//显⽰⽂件头63. fread(&strInfo,1,sizeof(tagBITMAPINFOHEADER),fpi);64. //showBmpInforHead(strInfo);//显⽰⽂件信息头65.66. //读取调⾊板67. for(unsigned int nCounti=0;nCounti68. {69. //存储的时候,⼀般去掉保留字rgbReserved70. fread((char *)&strPla[nCounti].rgbBlue,1,sizeof(BYTE),fpi);71. fread((char *)&strPla[nCounti].rgbGreen,1,sizeof(BYTE),fpi);72. fread((char *)&strPla[nCounti].rgbRed,1,sizeof(BYTE),fpi);73. cout<<"strPla[nCounti].rgbBlue"<<strPla[nCounti].rgbBlue<<endl;74. cout<<"strPla[nCounti].rgbGreen"<<strPla[nCounti].rgbGreen<<endl;75. cout<<"strPla[nCounti].rgbRed"<<strPla[nCounti].rgbRed<<endl;76. }77.78. width = strInfo.biWidth;79. height = strInfo.biHeight;80. imagedata = (IMAGEDATA*)malloc(width * height * sizeof(IMAGEDATA));81. imagedataRot = (IMAGEDATA*)malloc(2 * width * 2 * height * sizeof(IMAGEDATA));82. //初始化原始图⽚的像素数组83. for(int i = 0;i < height;++i)84. {85. for(int j = 0;j < width;++j)86. {87. (*(imagedata + i * width + j)).blue = 0;88. (*(imagedata + i * width + j)).green = 0;89. (*(imagedata + i * width + j)).red = 0;90. }91. }92. //初始化旋转后图⽚的像素数组93. for(int i = 0;i < 2 * height;++i)94. {95. for(int j = 0;j < 2 * width;++j)96. {97. (*(imagedataRot + i * 2 * width + j)).blue = 0;98. (*(imagedataRot + i * 2 * width + j)).green = 0;99. (*(imagedataRot + i * 2 * width + j)).red = 0;100. }101. }102. //fseek(fpi,54,SEEK_SET);103. //读出图⽚的像素数据104. fread(imagedata,sizeof(struct tagIMAGEDATA) * width,height,fpi);105.106. fclose(fpi);107. }108. else109. {110. cout<<"file open error!"<<endl;111. return NULL;112. }113.114. //图⽚旋转处理114. //图⽚旋转处理115. int RotateAngle;//要旋转的⾓度数116. double angle;//要旋转的弧度数117. int midX_pre,midY_pre,midX_aft,midY_aft;//旋转所围绕的中⼼点的坐标118. midX_pre = width / 2;119. midY_pre = height / 2;120. midX_aft = width;121. midY_aft = height;122. int pre_i,pre_j,after_i,after_j;//旋转前后对应的像素点坐标123. cout<<"输⼊要旋转的⾓度(0度到360度,逆时针旋转):"<<endl;124. cin>>RotateAngle;125. angle = 1.0 * RotateAngle * PI / 180;126. for(int i = 0;i < 2 * height;++i)127. {128. for(int j = 0;j < 2 * width;++j)129. {130. after_i = i - midY_aft;//坐标变换131. after_j = j - midX_aft;132. pre_i = (int)(cos((double)angle) * after_i - sin((double)angle) * after_j) + midY_pre;133. pre_j = (int)(sin((double)angle) * after_i + cos((double)angle) * after_j) + midX_pre;134. if(pre_i >= 0 && pre_i < height && pre_j >= 0 && pre_j < width)//在原图范围内135. *(imagedataRot + i * 2 * width + j) = *(imagedata + pre_i * width + pre_j);136. }137. }138.139. //保存bmp图⽚140. if((fpw=fopen("b.bmp","wb"))==NULL)141. {142. cout<<"create the bmp file error!"<<endl;143. return NULL;144. }145. WORD bfType_w=0x4d42;146. fwrite(&bfType_w,1,sizeof(WORD),fpw);147. //fpw +=2;148. fwrite(&strHead,1,sizeof(tagBITMAPFILEHEADER),fpw);149. strInfo.biWidth = 2 * width;150. strInfo.biHeight = 2 * height;151. fwrite(&strInfo,1,sizeof(tagBITMAPINFOHEADER),fpw);152. //保存调⾊板数据153. for(unsigned int nCounti=0;nCounti154. {155. fwrite(&strPla[nCounti].rgbBlue,1,sizeof(BYTE),fpw);156. fwrite(&strPla[nCounti].rgbGreen,1,sizeof(BYTE),fpw);157. fwrite(&strPla[nCounti].rgbRed,1,sizeof(BYTE),fpw);158. }159. //保存像素数据160. for(int i =0;i < 2 * height;++i)161. {162. for(int j = 0;j < 2 * width;++j)163. {164. fwrite( &(*(imagedataRot + i * 2 * width + j)).red,1,sizeof(BYTE),fpw);//注意三条语句的顺序:否则颜⾊会发⽣变化165. fwrite( &(*(imagedataRot + i * 2 * width + j)).green,1,sizeof(BYTE),fpw);166. fwrite( &(*(imagedataRot + i * 2 * width + j)).blue,1,sizeof(BYTE),fpw);167. }168. }169. fclose(fpw);170.171. //释放内存172. delete[] imagedata;173. delete[] imagedataRot;174. }转⾃CSDN 江南烟⾬博客在此表⽰感谢。

【转载】BMP图像文件格式

【转载】BMP图像文件格式

【转载】BMP图像文件格式***********************(推荐指数:)BMP图像文件格式是微软公司为其Windows环境设置的标准图像格式,而且 Windows系统软件中还同时内含了一系列支持BMP图像处理的API函数,随着Windows 在世界范围内的不断普及,BMP文件格式无疑也已经成为PC机上的流行图像文件格式。

它的主要特点可以概括为:文件结构与PCX文件格式类似,每个文件只能存放一幅图像;图像数据是否采用压缩方式存放,取决于文件的大小与格式,即压缩处理成为图像文件的一个选项,用户可以根据需要进行选择。

其中,非压缩格式是BMP图像文件所采用的一种通用格式。

但是,如果用户确定将BMP文件格式压缩处理,则Windows设计了两种压缩方式:如果图像为16色模式,则采用RLE4压缩方式,若图像为256色模式,则采用RLE8压缩方式。

同时,BMP图像文件格式可以存储单色、16色、256色以及真彩色四种图像数据,,其数据的排列顺序与一般文件不同,它以图像的左下角为起点存储图像,而不是以图像的左上角为起点;而且BMP图像文件格式中还存在另外一个与众不同的特点,即其调色板数据所采用的数据结构中,红、绿、蓝三种基色数据的排列顺序也恰好与其它图像文件格式相反。

总之,BMP图像文件格式拥有许多适合于Windows环境的新特色,而且随着Windows版本的不断更新,微软公司也在不断改进其BMP图像文件格式,例如:当前BMP 图像文件版本中允许采用32位颜色表,而且针对32位Windows 的产生,相应的API函数也在不断地报陈出新,这些无疑都同时促成了BMP文件格式的不断风靡。

但由于BMP文件格式只适合于Windows上的应用软件,而对于DOS环境中的各种应用软件则无法提供相应的支持手段,因此这无疑是阻碍BMP文件格式的流通程度超过PCX文件格式的一个重要因素。

Windows中定义了两种位图文件类型,即一般位图文件格式与设备无关位图文件格式。

bmp信号通路 机制

bmp信号通路 机制

bmp信号通路机制标题:bmp信号通路的工作原理引言:bmp信号通路是一种常用的数字图像处理方式,它在图像传输和存储中起着重要的作用。

本文将介绍bmp信号通路的工作原理,包括信号的产生、传输和解码过程,以及相关的技术细节。

一、信号的产生bmp信号通路的第一步是信号的产生,即将图像转换为数字信号。

传统的bmp格式图像是由像素点组成的,每个像素点的颜色值通过RGB三个分量来表示。

在信号的产生过程中,首先将图像分割成若干个像素点,然后通过采样和量化技术将每个像素点的RGB值转换为数字信号。

二、信号的传输经过信号产生后,数字信号需要通过信号通路进行传输。

在传输过程中,主要考虑的是信号的稳定性和抗干扰性。

为了保证信号的稳定性,通常会采用差分编码和调制技术来对信号进行处理。

差分编码可以减小信号传输中的噪声干扰,而调制技术可以将数字信号转换为模拟信号,以便在信号传输过程中更好地适应信道环境。

三、信号的解码在信号传输到接收端后,需要进行解码操作,将数字信号转换为原始图像。

解码过程主要包括差分解码和调制解调两个步骤。

差分解码将差分编码的信号还原为原始信号,而调制解调则将模拟信号转换为数字信号。

通过这两个步骤的处理,最终可以得到与原始图像相符的数字信号。

结论:bmp信号通路是一种重要的数字图像处理方式,它通过信号的产生、传输和解码过程,实现了图像的传输和存储。

在实际应用中,需要注意信号的稳定性和抗干扰性,以及解码过程中的差分解码和调制解调等细节。

通过深入了解bmp信号通路的工作原理,可以更好地理解数字图像处理的基本原理,并在实际应用中进行优化和改进。

跨平台BMP图像处理程序的实现

跨平台BMP图像处理程序的实现
E- i: a y n z i mal o mal p n o g h @g i c m .
PAN Yo g z i LI n - h , Yu- e, U Do g- u .mp e e t t n o r S — l to m h LI n y eI lm n a i f c o S p a r BM P m a e r c s i g r g a . m p e o f i g p o e sn p o r m Co utr
本文介绍了跨平台概念及其在程序开发中的重要性并给出了跨平台bmp图像处理程序的实现方法以及若干用编写的跨平台bmp图像处理程序这些程序无需任何修改就可以在不同的硬件平台和不同的操作系统下编译和运行
维普资讯
8 4
2 0 .3 1A pi t n o p trE gnei n p l ai s计 算 机 工 程 与应 用 n c o
◎ 品、 发 、 产 研 测试 ◎
跨平 台 B MP图像 处理程序 的实现
潘 永之 , 玉和 , 东岳 李 刘
P AN Yo g h LI n —z i, Yu —he , U Do g y LI n - ue
1 华 大学 精 密仪 器 与机 械 学 系 , 京 10 8 . 清 北 00 4 2北 京 市 10 . 3 3信 箱 1 箱 。 4分 北京 10 7 00 3 1 eat n o r io nt met a d M c aooyTigu nvri ,e ig 10 8 , hn . pr D met fPe s n Is u n n eh nlg ,s h a U i sy B in 00 4 C i ci r s n e t j a 2N . , i o 3 3 B in 0 0 3. i .o1 Mal x 10 ,e i 10 7 ,hn 4 b jg C a

【数字图像处理】一、BMP文件的读写

【数字图像处理】一、BMP文件的读写

一、BMP文件读写1.BMP文件组成BMP文件有文件头、位图信息头、颜色信息和图像数据等四部分组成。

BMP文件头数据包含BMP文件类型、文件大小和位图起始位置等信息。

其结构定义如下:typedef struct tagBITMAPFILEHEADER{WORD bfType;//位图文件的类型,必须为BMPDWORD bfSize;//位图文件的大小,以字节为单位WORD bfReserved1;//位图文件保留字,必须为0WORD bfReserved2;//位图文件保留字,必须为0DWORD bfOffBits;//位图数据的起始位置,以相对于位图文件头的偏移量表示,以//字节单位}BITMAPFILEHEADER;BMP位图信息头数据用于说明位图的尺寸等信息。

其结构定义如下:typedef struct tagBITMAPINFOHEADER{DWORD biSize;//本结构所占用字节数LONG biWidth;//位图的宽度,以像素为单位LONG biHeight;//位图的高度,以像素为单位WORD biplanes;//目标设备的级别,必须为1WORD biBitCount;//每个像素所需要的位数,必须为1(双色),4(16色),8(256//色)或24(真彩色)之一DWORD biCompression;//位图压缩类型,必须为0(不压缩),1(BI_RLE8压缩类//型)或2(BI_RLE4压缩类型)之一DWORD biSizeIMage;//位图的大小,以字节为单位LONG biXPelsPerMeter;//位图水平分辨率,每米像素数LONG biXPelsPerMeter;// 位图垂直分辨率,每米像素数DWORD biClrUsed;//位图实际使用的颜色表中的颜色数DWORD biClrImportant;//位图显示过程中重要的颜色数}BITMAPINFOHEADER颜色表用于说明位图中的颜色,它有若干个表项,每一表项是一个RGBQUAR类型的结构,定义一种颜色。

第3讲 BMP图像格式及编程基础_40975

第3讲 BMP图像格式及编程基础_40975

biYPelsPerMeter
biClrUsed biClrImportant
DWORD 设备垂直方向每米长度上的象素数
DWORD 颜色表中点阵位图实际使用的颜色数 DWORD 给出重要的颜色索引值
—— 电气与电子工程学院 ——
第4页
图像格式 ---bmp图像格式
颜色表 名称
rgbBlue rgbGreen rgbRed rgbReserved
lx4.m
LEN = 25;THETA = 0; PSF = fspecial('motion',LEN,THETA); Blurred = imfilter(I,PSF,'circular','conv'); figure; imshow(Blurred);title('运动模糊图'); wnr1 = deconvwnr(Blurred,PSF);
1-1.增强对比度:选择一副对比度明显不足的256级灰度 图像(如pout.tif),对该图像进行增强对比度操作,显示增 强对比度前后的图像,绘制出所用变换曲线。 要求曲线为 三段折线且折线中间两点为(f1=80, g1=25)、(f2=180, g2=220)。 1-2.图像求反:选择任意一副256级灰度图像,对该图像 进行图像求反操作,显示处理前后的图像。 1-3 动态范围压缩:选择一副动态范围过大图像(如 circuit.tif),利用对数曲线g=c*log(1+f)(c = 98.7)对此图 像进行动态范围压缩。显示处理前后的图像,并绘制出所 用对数曲线。
—— 电气与电子工程学院 ——
第2页
图像格式 ---bmp图像格式
位图信息数据
名称 biSize biWidth 类型 DWORD DWORD 说明 信息头的字节大小 图形宽度(列数)

BMP文件图像模糊化处理的设计报告

BMP文件图像模糊化处理的设计报告

《沟通与协作实训》实习报告专业班级:学号:姓名:2013年7月第一部分认知实习总结经过这五天的认知实习我收获很大,首先是我们的东营之旅,回到我们的老校区,在那里的食堂吃饭,看荟萃湖盛开的荷花,看“东营版”的创造太阳雕塑,参观各个学院的办公楼,教学楼,实验楼,包括宿舍,都让我觉得有种新鲜感,那是种陌生又熟悉的感觉,作为石油大学的学生,看见老校区着实有种情切的感觉,尤其是来到我们计算机与通信工程学院楼前,脑中浮现出的是我的学长们在这所建筑物中拼搏的景象,听见老师讲述当年的一切,我们都很感兴趣心中充满了好奇,暗暗为自己加油,希望有一天我们走出校门的时候,也能做出与我们学校名声相配的成绩,只有这样才不会辱没我们石油大学这六十年的光辉校史,只有这样才对得起师长的教诲,只有这样我们才能称自己是石大人,因为我们有艰苦奋斗的传统,有令人羡慕的成绩,我为你感到骄傲石油大学。

之后我们来到了东营的中国联通公司,在那里我们参观了它的计算中心,我非常兴奋,因为第一次看见那么多的网线,和那么大的主机,那么多的机器,之前我从未想过我所学习的软件工程专业竟然需要这么多的设备来支持,我知道这些设备运行的背后是靠着大量的代码来支撑的,只是多么好的硬件和软件相结合啊,让我不禁感叹这个计算机的世界真是太美秒了,它带动着整个世界在飞速发展,而我有一天也会投身在这一行业,发挥自己的力量,燃烧总记得光和热,为社会奉献自己的力量,第一次来联通公司的内部,感觉这里很神秘,在里面我们还了解到了GIS,看见工作人员通过电脑实时查看道路交通状况,甚至连那个车在做什么有没有在工作都看的一清二楚,我又一次感到自己要学的东西还有太多太多,自己不知道的世界还很大很大,自己要看清自己的渺小,通过不断学习来充实自己的大脑,希望自己可以在计算机领域可以取得令自己满意的成绩,因为这个领域真的是太神奇了,如果只是表面的认识我会觉得很失败,因此我会努力学习,在更深层次认识计算机,认识软件工程。

opencv bmp标准格式

opencv bmp标准格式

opencv bmp标准格式图像处理是计算机视觉领域的重要分支,在计算机图形学和机器视觉中起着至关重要的作用。

而OpenCV作为一个开源的图像处理库,提供了许多功能强大的工具和算法,其中包括对BMP标准格式图像的处理和操作。

本文将介绍OpenCV中关于BMP标准格式的相关知识和使用方法。

1、BMP标准格式简介BMP(Bitmap)是Windows操作系统中使用的一种常见的图像文件格式。

它以二进制形式存储,并使用HEADER(文件头)、INFOHEADER(信息头)和位图数据等部分组成。

HEADER包含了文件类型、大小和像素数据的偏移量等信息,而INFOHEADER则包括了图像的宽度、高度和位深等信息。

OpenCV可以读取和保存这种标准格式的BMP图像,并提供了丰富的函数库进行图像处理。

2、使用OpenCV读取BMP图像使用OpenCV读取BMP图像非常简单,可以使用imread函数来实现。

imread函数接受图像文件的路径作为参数,并返回一个Mat对象,该对象包含了图像的像素数据和其他相关信息。

下面是一个示例代码:```cpp#include <opencv2/opencv.hpp>using namespace cv;int main() {// 读取BMP格式图像Mat image = imread("test.bmp", IMREAD_COLOR);// 检查图像是否成功读取if (image.empty()) {printf("无法读取图像文件!\n");return -1;}// 显示图像namedWindow("BMP Image", WINDOW_NORMAL);imshow("BMP Image", image);waitKey(0);return 0;}```在这个示例中,我们首先使用imread函数加载一个名为"test.bmp"的BMP图像文件,并将返回结果存储在Mat对象中。

BMP 图像显示处理

BMP 图像显示处理

BMP 图像显示处理DIB 格式Bottomp up 第一个像素显示在左下角Top up 第一个像素显示在左上角2015-09-30 writer by tphyh=================================uboot bmp 数据格式#ifndef _BMP_H_#define _BMP_H_typedef struct bmp_color_table_entry {__u8 blue;__u8 green;__u8 red;__u8 reserved;} __attribute__ ((packed)) bmp_color_table_entry_t;typedef struct bmp_header {/* Header */char signature[2]; //42 4d -->'B','M'__u32 file_size; //88 b4 02 00--> 173k+0x88__u32 reserved; //00 00 00 00__u32 data_offset; //36 00 00 00/* InfoHeader */__u32 size; //28 00 00 00__u32 width; //d1 00 00 00-->209 * 212 * 4 = 177232 > 173k__u32 height; //d4 00 00 00-->212 bottom up / top up__u16 planes; //01 00 --> 1__u16 bit_count; //20 00 -->32位__u32 compression; //00 00 00 00 没有压缩__u32 image_size; //52 b4 02 00-->173k+0x52 = 177234__u32 x_pixels_per_m;//12 0b 00 00-->水平分辨率2834 用像素/米表示__u32 y_pixels_per_m;//12 0b 00 00-->垂直分辨率__u32 colors_used; //00 00 00 00 说明位图实际使用的彩色表中的颜色索引值,0表示使用所有的调色板的值__u32 colors_important;//00 00 00 00 图像显示有重要影响的颜色索引的数目,如果是0,表示都重要。

图像处理基本概念

图像处理基本概念

3.颜色模式间的转换
灰度模式是位图/双色调模式和其他模式相互转换的中介模式。
只有灰度模式和RGB模式的图像可以转换为索引颜色模式。
Lab模式色域最宽,包括RGB和CMYK色域中所有颜色。Photoshop是以Lab模式作为内部转换模式。
多通道模式可通过转换颜色模式和删除原有图像的颜色通道得到。
显示分辨率:像素/英寸(ppi)
设备分辨率:打印点数/英寸 (dpi)
新建文件时:
基于WEB: 单位 像素 文件存为GIF或JPG格式
分辨率 ≤72PPI
色彩模式 RGB模式
基于桌面出版:单位 mm/cm
分辨率≥300PPI 文件存为TIF格式
色彩模式 CMYK模式
⑻ 多通道模式:若图像只使用了1~3种颜色时,使用该模式可减少印刷成本并保证图像颜色的正确输出。
⑼8位/通道和16/通道模式: 8位/通道中包含256个灰阶, 16/通道包含65535个灰阶。在灰度、RGB或CMYK模式下可用16/通道代替8位/通道。 16/通道模式的图像不能被打印,且有的滤镜不能用。
蓝+绿=青,蓝+红=洋红,红+绿=黄,蓝+红+绿=白光
CMYK模型:以打印在纸上的油墨的光线吸收特性为基础。
印刷品上的颜色是通过油墨显现的,不同颜色的油墨混合产生不同的颜色效果。油墨本身并不发光,它是通过吸收(减去)一些色光,而把其他色光反射到人们的眼睛里产生的颜色效果。又称为“减色模型”。
(四)Photoshop常用文件格式
1.PSD和PDD格式
是Photoshop软件的专用文件格式。能保存图层、通道、路径等信息,便于以后修改。缺点是保存文件较大。

bmp转jpg算法原理

bmp转jpg算法原理

bmp转jpg算法原理随着数字图像处理技术的不断发展,图像格式的转换变得越来越普遍。

其中,BMP转JPG是一种常见的格式转换需求。

JPG是一种有损压缩格式,而BMP是一种位图格式,它们之间的转换涉及到一些算法原理。

本文将详细介绍BMP转JPG 的算法原理。

一、BMP格式简介BMP(BitmapPicture)是一种位图文件格式,通常用于存储图像数据。

BMP 文件以结构化的方式组织图像数据,每个像素由红、绿、蓝三个分量表示,通常还包含有关于图像大小、分辨率和压缩方式等信息。

BMP文件结构包括文件头、位图信息头、像素数据等部分。

二、JPG格式简介JPG(JointPhotographicExpertGroup)是一种有损压缩格式,广泛用于静态图像的存储和传输。

它采用基于离散余弦变换(DCT)的算法对图像数据进行压缩,能够大幅度减小图像数据的大小,同时尽可能保持较好的图像质量。

JPG文件结构包括文件头、Exif(ExchangeableImageFileFormat)信息、JPG信息头、数据等部分。

1.图像尺寸调整:在进行BMP转JPG转换时,首先需要将BMP图像调整为与JPG格式兼容的大小。

这可以通过重新采样图像像素数据来实现。

2.DCT变换:JPG压缩算法基于离散余弦变换(DCT)原理。

将BMP图像数据通过DCT变换,可以将空间域的数据转换为频率域的数据,从而实现了压缩的目的。

在转换过程中,需要对DCT系数进行量化和平滑处理,以减小数据量同时保持较好的图像质量。

3.熵编码与游程编码:为了进一步减小数据量,需要对量化后的DCT系数进行熵编码和游程编码。

熵编码是对DCT系数的编码方式,游程编码则是利用连续的零值像素块进行压缩。

4.存储文件头与数据:将转换后的图像数据存储到JPG文件中,包括文件头、Exif信息、JPG信息头和数据等部分。

其中,数据部分包含了转换后的图像像素数据。

5.质量设置:在转换过程中,可以通过设置JPG文件的质量参数来控制图像的压缩比和图像质量。

BMP图像数据格式详解

BMP图像数据格式详解

BMP图像数据格式详解⼀.简介BMP(Bitmap-File)图形⽂件是Windows采⽤的图形⽂件格式,在Windows环境下运⾏的所有图象处理软件都⽀持BMP图象⽂件格式。

Windows系统内部各图像绘制操作都是以BMP为基础的。

Windows 3.0以前的BMP图⽂件格式与显⽰设备有关,因此把这种BMP图象⽂件格式称为设备相关位图DDB(device-dependent bitmap)⽂件格式。

Windows 3.0以后的BMP图象⽂件与显⽰设备⽆关,因此把这种BMP图象⽂件格式称为设备⽆关位图DIB(device-independent bitmap)格式(注:Windows 3.0以后,在系统中仍然存在DDB位图,象BitBlt()这种函数就是基于DDB位图的,只不过如果你想将图像以BMP格式保存到磁盘⽂件中时,微软极⼒推荐你以DIB格式保存),⽬的是为了让Windows能够在任何类型的显⽰设备上显⽰所存储的图象。

BMP位图⽂件默认的⽂件扩展名是BMP或者bmp(有时它也会以.DIB或.RLE作扩展名)。

⼆.BMP格式结构BMP⽂件的数据按照从⽂件头开始的先后顺序分为四个部分:◆位图⽂件头(bmp file header):提供⽂件的格式、⼤⼩等信息◆位图信息头(bitmap information):提供图像数据的尺⼨、位平⾯数、压缩⽅式、颜⾊索引等信息◆调⾊板(color palette):可选,如使⽤索引来表⽰图像,调⾊板就是索引与其对应的颜⾊的映射表◆位图数据(bitmap data):图像数据区BMP图⽚⽂件数据表如下:数据段名称⼤⼩(byte)开始地址结束地址位图⽂件头(bitmap-file header)140000h000Dh40000Eh0035h位图信息头(bitmap-informationheader)调⾊板(color table)由biBitCount决定0036h未知图⽚点阵数据(bitmap data)由图⽚⼤⼩和颜⾊定未知未知三.BMP⽂件头BMP⽂件头结构体定义如下:typedef struct tagBITMAPFILEHEADER{UINT16 bfType; //2Bytes,必须为"BM",即0x424D 才是Windows位图⽂件DWORD bfSize; //4Bytes,整个BMP⽂件的⼤⼩UINT16 bfReserved1; //2Bytes,保留,为0UINT16 bfReserved2; //2Bytes,保留,为0DWORD bfOffBits; //4Bytes,⽂件起始位置到图像像素数据的字节偏移量} BITMAPFILEHEADER;BMP⽂件头数据表如下:变量名地址偏移⼤⼩作⽤说明bfType0000h2Bytes⽂件标识符,必须为"BM",即0x424D 才是Windows位图⽂件‘BM’:Windows 3.1x, 95, NT,…  ‘BA’:OS/2 Bitmap Array  ‘CI’:OS/2 Color Icon ‘CP’:OS/2 Color Pointer ‘IC’:OS/2 Icon ‘PT’:OS/2 Pointer因为OS/2系统并没有被普及开,所以在编程时,你只需判断第⼀个标识“BM”就⾏bfSize0002h4Bytes整个BMP⽂件的⼤⼩(以位B为单位)bfReserved10006h2Bytes保留,必须设置为0bfReserved20008h2Bytes保留,必须设置为0bfReserved20008h2Bytes0bfOffBits000Ah4Bytes0000h开始到图像像素Bytes为四.BMP信息头BMP信息头结构体定义如下:typedef struct _tagBMP_INFOHEADER{DWORD biSize; //4Bytes,INFOHEADER结构体⼤⼩,存在其他版本I NFOHEADER,⽤作区分LONG biWidth; //4Bytes,图像宽度(以像素为单位)LONG biHeight; //4Bytes,图像⾼度,+:图像存储顺序为Bottom2Top,-:Top2Bottom WORD biPlanes; //2Bytes,图像数据平⾯,BMP存储RGB数据,因此总为1WORD biBitCount; //2Bytes,图像像素位数DWORD biCompression; //4Bytes,0:不压缩,1:RLE8,2:RLE4DWORD biSizeImage; //4Bytes,4字节对齐的图像数据⼤⼩LONG biXPelsPerMeter; //4 Bytes,⽤象素/⽶表⽰的⽔平分辨率LONG biYPelsPerMeter; //4 Bytes,⽤象素/⽶表⽰的垂直分辨率DWORD biClrUsed; //4 Bytes,实际使⽤的调⾊板索引数,0:使⽤所有的调⾊板索引DWORD biClrImportant; //4 Bytes,重要的调⾊板索引数,0:所有的调⾊板索引都重要}BMP_INFOHEADER;BMP信息头数据表如下:变量名地址偏移⼤⼩作⽤说明biSize000Eh4Bytes BNP信息头即BMP_INFOHEADER结构体所需要的字节数(以字节为单位)biWidth0012h4Bytes说明图像的宽度(以像素为单位)biHeight0016h4Bytes说明图像的⾼度(以像素为单位)。

BMP文件处理

BMP文件处理

位图和Bitblt位图是一个二维的位数组,此数组的每一个元素与图像的像素一一对应。

现实世界的图像被捕获以后,图像被分割成网格,并以像素作为取样单位。

位图中的每个像素值指明了一个单位网格内图像的平均颜色。

位图代表了Windows程序中存储图像信息的两种方法之一,另一种形式是元文件。

位图也有两种:GDI位图对象和设备无关的位图(DIB: device-independent bitmap)。

位图基础位图常用来表示来自真实世界的复杂图像,元文件更适合于描述由人或者机器生成的图像。

它们都能存于内存或作为文件存于磁盘上,且能通过剪贴板在Windows应用程序间传输。

位图和元文件的区别在于光栅图像和矢量图像间的差别。

光栅图像用离散的像素来处理输出设备;矢量图像用笛卡尔坐标系统来处理输出设备,可在其中绘制线和填充对象。

位图的缺点:1、容易受设备依赖性的影响。

2、位图常暗示了特定的显示分辨率和图像纵横比,在缩放后容易出现失真。

3、存储空间大。

但位图具有处理速度快的优点。

位图可以手工创建,也可计算机代码生成,还可由硬件设备把现实世界输入到计算机,如数码相机,它们通常是使用接触到光就释放电荷的电荷耦合装置(CCD: charge-coupled device)将光的强度转换为电荷,再用模数转换装置(ADC: Analog-to-digital)转换为数字再排列为位图。

位图尺寸位图呈矩形,具有空间尺寸,以像素为单位度量位图的高度和宽度。

以位于图像左上角为位图原点,从0开始计数。

位图的空间尺寸也指定了其分辨率,但此词具有争议,分辨率也指单位长度内的像素数。

位图是矩形的,但内存是线性的。

大多数位图按行存储在内存中,且从顶行像素开始从左到右直到底行结束。

位图还有颜色度量单位:指每个像素所需要的位数,也称颜色深度(color depth)、位数(bit-count)、或位/每像素(bpp: bits per pixel)。

每个像素用1位来描述的位图称为二级(bilevel)、二色(bicolor)或单色(monochrome)位图。

8位灰度图像BMP的保存

8位灰度图像BMP的保存

8位灰度图像BMP的保存[zz]2012-04-07 21:01在图像处理中,我们经常需要将真彩色图像转换为黑白图像。

严格的讲应该是灰度图,因为真正的黑白图像是二色,即只有纯黑,纯白二色。

开始之前,我们先简单补充一下计算机中图像的表示原理。

计算机中的图像大致可以分成两类:位图(Bitmap)和矢量图(Metafile)。

位图可以视为一个二维的网格,整个图像就是由很多个点组成的,点的个数等于位图的宽乘以高。

每个点被称为一个像素点,每个像素点有确定的颜色,当很多个像素合在一起时就形成了一幅完整的图像。

我们通常使用的图像大部分都是位图,如数码相机拍摄的照片,都是位图。

因为位图可以完美的表示图像的细节,能较好的还原图像的原景。

但位图也有缺点:第一是体积比较大,所以人们开发了很多压缩图像格式来储存位图图像,目前应用最广的是JPEG格式,在WEB上得到了广泛应用,另外还有GIF,PNG等等。

第二是位图在放大时,不可避免的会出现“锯齿”现象,这也由位图的本质特点决定的。

所以在现实中,我们还需要使用到另一种图像格式:矢量图。

同位图不同,矢量图同位图的原理不同,矢量图是利用数学公式通过圆,线段等绘制出来的,所以不管如何放大都不会出现变形,但矢量图不能描述非常复杂的图像。

所以矢量图都是用来描述图形图案,各种CAD软件等等都是使用矢量格式来保存文件的。

在讲解颜色转换之前,我们要先对位图的颜色表示方式做一了解。

位图中通常是用RGB 三色方式来表示颜色的(位数很少时要使用调色板)。

所以每个像素采用不同的位数,就可以表示出不同数量的颜色。

如下图所示:每像素的位数一个像素可分配到的颜色数量12^1 = 222^2 = 442^4 = 1682^8 = 256162^16 = 65,536242^24 = 16,777,216从中我们可以看出,当使用24位色(3个字节)时,我们可以得到1600多万种颜色,这已经非常丰富了,应该已接近人眼所能分辨的颜色了。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

fclose(mybmp);
}
BMPFileInfo MyInfo;
void PrintBMPInfo()
{
FILE *mybmp;
mybmp=fopen(FILEPATH,"r");
fseek(mybmp,14,0);
fread(&MyInfo.Size,1,4,mybmp);
for(i=0;i<x;i++){
temp=img[i+x*j];
img[i+x*j]=img[i+x*(y-j-1)];
img[i+x*(y-j-1)]=temp;
#define MAXWIDTH 2048
#define MAXHEIGHT 2048
#define PALLETSIZE 1024
unsigned short Bmp_color;
unsigned int Bmp_header_size;
unsigned int Bmp_info_header_size;
}
}
}
void WriteBmp(char *filename, __img *tp)//write bmp
{
int i,j;
int Real_width;
FILE *Out_Fp = fopen(filename,"wb");
unsigned char *Bmp_Data;
fread(&MyHeader.B,1,1,mybmp);
fread(&MyHeader.M,1,1,mybmp);
fread(&MyHeader.FileSize,1,4,mybmp);
fread(&MyHeader.Reserved1,1,4,mybmp);
fread(&MyHeader.HeaderLength,1,4,mybmp);
printf("Level:\t\t\t%ld\n",MyInfo.Level);
printf("ColorDepth:\t\t%ld\n",MyInfo.ColorDepth);
printf("PixelBytes:\t\t%ld\n",MyInfo.PixelBytes);
fclose(mybmp);
}
void _Invert_img2(unsigned char* img)//ration img2
{
unsigned char temp;
unsigned int i,j,x,y;
x=MyInfo.Width*3;
y=MyInfo.Height;
for(j=0;j<y/2;j++){
printf("Size:\t\t\t%ld\n",MyInfo.Size);
printf("Width:\t\t\t%ld\n",MyInfo.Width);
printf("Height:\t\t\t%ld\n",MyInfo.Height);
printf("Height*Width:\t\t%ld\n",MyInfo.Height*MyInfo.Width*3);
unsigned long offset1;
unsigned long offset2;
}BMPFileInfo;
typedef struct BMPFileHeader{
unsigned char B;
unsigned char M;
unsigned long FileSize;
fread(&MyInfo.Width,1,4,mybmp);
fread(&MyInfo.Height,1,4,mybmp);
fread(&MyInfo.Level,1,2,mybmp);
fread(&MyInfo.ColorDepth,1,2,mybmp);
fread(&press,1,4,mybmp);
if(Out_Fp==NULL){
fprintf(stderr,"Error: file %s couldn\'t open for write!\n",filename);
exit(1);
}
Bmp_color=24;
Bmp_header_size=HEADERSIZE;
FILE *f=fopen("a.raw","wb");
data_size=MyInfo.Height*MyInfo.Width*3;
for(i=0;i<data_size;i++)
fputc(img2[i],f); // b,g,r;
fclose(f);
{
unsigned int i,_i=0;
unsigned _img_w;
_img_w=MyInfo.Width*3;
if((_img_w%4)!=0)_img_w=((MyInfo.Width*3)/4+1)*4;
for(i=0;i<(MyHeader.FileSize-54)/_img_w*_img_w;i++){
Bmp_size = Bmp_image_size + HEADERSIZE;
Bmp_headbuf[0]='B'; Bmp_headbuf[1]='M';
memcpy(Bmp_headbuf+2,&Bmp_size,sizeof(Bmp_size));
Bmp_headbuf[6]=Bmp_headbuf[7]=Bmp_headbuf[8]=Bmp_headbuf[9]=0;
printf("FileType:\t\t%c %c P\n",MyHeader.B,MyHeader.M);
printf("FileSize:\t\t%ld bytes\n",MyHeader.FileSize);
printf("HeaderLength:\t\t%ld \n",MyHeader.HeaderLength);
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define FILEPATH "C:\\Documents and Settings\\All Users\\Documents\\My Pictures\\示例图片\\Water lilies1.bmp"
Bmp_headbuf[15]=Bmp_headbuf[16]=Bmp_headbuf[17]=0;
Bmp_info_header_size=40;
Bmp_planes=1;
Real_width = tp->width*3 + tp->width%4;
if((Bmp_Data = (unsigned char *)calloc(Real_width,sizeof(unsigned char)))==NULL) {
memcpy(Bmp_headbuf+10,&Bmp_header_size,sizeof(Bmp_header_size));
Bmp_headbuf[11]=Bmp_headbuf[12]=Bmp_headbuf[13]=0;
memcpy(Bmp_headbuf+14,&Bmp_info_header_size,sizeof(Bmp_info_header_size));
fprintf(stderr,"Error: Memory allocation failed for Bmp_Data!\n");
exit(1);
}
Bmp_xppm=Bmp_yppm=0;
Bmp_image_size = tp->height*Real_width;
}
void ReadBidata(unsigned char*img)//read data part of bmp file
{
unsigned int i;
unsigned int data_size;
data_size=MyHeader.FileSize-54;
FILE *mybmp;
} color;
typedef struct {
long height;
long width;
color data[MAXHEIGHT][MAXWIDTH];
} __img;
/*****************WriteBmp*************/
#define HEADERSIZE 54
if(i%_img_w<MyInfo.Width*3){
img2[_i]=img[i];
_i++;
}
}
}
void SaveBipFile(unsigned char* img2)//save raw image as a raw
{
unsigned int i,data_size;
unsigned short Bmp_planes;
long Bmp_xppm;
相关文档
最新文档