mfc图像变换系统的设计与实现毕业论文(编辑修改稿)内容摘要:
的偏移字节数,图 21 中前 3 个部分的长度之和。 MFC 图像变换软件的设计与实现 5 单色 D IB 有 2 个表项 16 色 D IB 有 16 个表项或更少 256 色 D IB 有 256 个表项或更少 真彩色 D IB 没有调色板 每个表项长度为 4 字节( 32 位) 像素按照每行每列的顺序排列 每一行的字节数必须是 4 的整数倍 b i S i z e b i W i d t h b i H e i g h t b i P l a n e s b i Bi t Co u n t b i Co m p re s s i o n b i S i z e Im a g e b i X P e l s P e rM e t e r b i Y P e l s P e rM e t e r b i Cl rU s e d b i Cl rIm p o rt a n t b f T y p e = ” BM ” b f S i z e b f Re s e rv e d 1 b f Re s e rv e d 2 b f O f f Bi t s BI TM A P F I LEH EA D ER 位图文件头 (只用于 BM P 文件) BI TM A P I N F O H EA D ER 位图信息头 P a l e tte 调色板 D I B P i x e l s DIB 图像数据 图 21 BMP 文件结构示意图 第 2 部分为位图信息头 BITMAPINFOHEADER,也是一个结构体类型的数据结构,该结构的长度也是固定的,为 40 个字节( WORD 为无符号 16 位整数,DWORD 为无符号 32 位整数, LONG 为 32 位整数)。 其定义如下: typedef struct tagBITMAPINFOHEADER { DWORD biSize。 LONG biWidth。 LONG biHeight。 WORD biPlanes。 WORD biBitCount DWORD biCompression。 DWORD biSizeImage。 LONG biXPelsPerMeter。 LONG biYPelsPerMeter。 MFC 图像变换软件的设计与实现 6 DWORD biClrUsed。 DWORD biClrImportant。 } BITMAPINFOHEADER, FAR *LPBITMAPINFOHEADER, *PBITMAPINFOHEADER。 BITMAPINFOHEADER 结构的各个域的详细说明如下: biSize:本结构的长度,为 40 个字节。 biWidth:位图的宽度,以像素为单位。 biHeight:位图的高度,以像素为单位。 biPlanes:目标设备的级别,必须是 1。 biBitCount:每个像素所占的位数( bit),其值必须为 1(黑白图像)、 4( 16色图)、 8( 256 色)、 24(真彩色图),新的 BMP 格式支持 32 位色。 biCompresssion:位图压缩类型,有效的值为 BI_RGB(未经压缩)、 BI_RLEBI_RLE BI_BITFILEDS(均为 Windows 定义常量)。 这里只讨论未经压缩的情况,即 biCompression=BI_RGB。 biSizeImage:实际的位图数据占用的字节数,该值的大小在第 4 部分位图数据中有具体解释。 biXPelsPerMeter:指定目标设备的水平分辨率,单位是像素 /米。 biYPelsPerMeter:指定目标设备的垂直分辨率,单位是像素 /米。 biClrUsed:位图实际用到的颜色数,如果该值为零,则用到的颜色数为 2的 biBitCount 次幂。 biClrImportant:位图显示过 程中重要的颜色数,如果该值为零,则认为所有的颜色都是重要的。 第 3 部分为颜色表。 颜色表实际上是一个 RGBQUAD 结构的数组,数组的长度由 biClrUsed 指定(如果该值为零,则由 biBitCount 指定,即 2 的 biBitCount次幂个元素)。 RGBQUAD 结构是一个结构体类型,占 4 个字节,其定义如下: typedef struct tagRGBQUAD { BYTE rgbBlue。 BYTE rgbGreen。 BYTE rgbRed。 BYTE rgbReserved。 MFC 图像变换软件的设计与实现 7 }RGBQUAD。 RGBQUAD 结构的各个域的详细说明如下: rgbBlue:该颜色的蓝色分量; rgbGreen:该颜色的绿色分量; rgbRed:该颜色的红色分量; rgbReserved:保留字节,暂不用。 第 4 部分是位图数据,即图像数据,其紧跟在位图文件头、位图信息头和颜色表(如果有颜色表的话)之后,记录了图像的每一个像素值。 对于有颜色表的位图,位图数据就是该像素颜色在调色板中的索引值;对于真彩色图,位图数据就是实际的 R、 G、 B 值(三个分量的存储顺序是 B、 G、 R)。 下面就 2 色、 16色、 256 色位图和真彩色位图分别介绍。 对于 2 色位图,用 1 位就可以表示该像素的颜色(一般 0 表示黑, 1 表示白),所以一个字节可以表示 8 个像素。 对于 16 色位图,用 4 位可以表示一个像素的颜色,所以 1 个字节可以表示2 个像素。 对于 256 色位图, 1 个字节刚好可以表示 1 个像素。 对于真彩色图, 3 个字节才能表示 1 个像素。 2. 2. 2 BMP图像的读写 2. 2. 2. 1 BMP 图像的读 : (1)首先定义 BMP 文件头和信息头变量 BITMAPFILEHEADER bf。 //BMP文件头结构体 BITMAPINFOHEADER bi。 //BMP信息头结构体 (2)创建文件输入流 fp fp=fopen(fileName,rb)。 //fileName为 BMP图像文件名 (3)读取信息头、文件头 fread(amp。 bf,sizeof(BITMAPFILEHEADER),1,fp)。 fread(amp。 bi,sizeof(BITMAPINFOHEADER),1,fp)。 经过这两条程序把 BMP图像的 信息头、文件头赋给 bf和 bi变量,可以根据 bf和 bi得到图像的各种属性。 (4) 读取 BMP调色板 fread(ipRGB2,sizeof(RGBQUAD),256,fp)。 (5)读取 BMP位图数据 定义一个二维数组 Imgdata来存取 BMP位图数据 unsigned char * * Imgdata。 MFC 图像变换软件的设计与实现 8 Imgdata=new unsigned char*[]。 //声明一个指针数组 for ( i=0。 i。 i++) Imgdata[i]=new unsigned char[(*3+3)/4*4]。 //每个数组元素也是一个指针数组 for ( i=0。 i。 i++ ) for(j=0。 j(*3+3)/4*4。 j++) fread(amp。 Imgdata[i][j],1,1,fp)。 //每次只读取一个字节,存入数组 2. 2. 2. 2 BMP 图像的写 : (1)创建一个输出流 fp fp=fopen(,wb)。 (2) 写 BMP图像的信息头、文件头 fwrite(amp。 bf2,sizeof(BITMAPFILEHEADER),1,fp)。 fwrite(amp。 bi2,sizeof(BITMAPINFOHEADER),1,fp)。 (3) 写 BMP调色板 fwrite(ipRGB2,sizeof(RGBQUAD),256,fp)。 (4) 写 BMP图像的位图数据部分 for (i=()1。 i=0。 i) for (j=0。 j(*3+3)/4*4。 j++) fwrite(amp。 Imgdata[i][j],1,1,fp)。 图 像 变化的基本形式 图像的 基本 变换 形式 ,通常包括图像的平移、图像的镜像变换、图像的转置、图像的缩放和图像的旋转等。 2. 3. 1 图像的平移 图像平移就是将图像中所有的点都按照指定的平移量水平、垂直移动。 设( x0, y0)为原图像上的一点,图像水平平移量为 tx,垂直平移量为 ty,则平移后点( x0, y0)坐标将变为( x1, y1)。 显然( x0, y0)和( x1, y1)的关系如下: tyyy txxx 01 01 用矩阵表示如下: MFC 图像变换软件的设计与实现 9 1001001001111yxtytxyx 对该矩阵求逆,可以得到逆变换: 1111001001100yxtytxyx 即 tyyy txxx 10 10 这样,平移后的图像上的每一点都可以在原图像中找到对应的点。 例如,对于新图中的( 0, 0)像素,代入上面的方程组,可以求出对应原图中的像素( tx,ty)。 如果 tx或 ty大于 0,则( tx, ty)不在原图中。 对于不在原图中的点,可以直接将它的像素值统一设置为 0 或则 255(对于灰度图就是黑色或白色)。 同样,若有点不在原图中,也就说明原图中有点被移出显示区域。 如果不 想丢失被移出的部分图像,可以将新生成的图像宽度扩大 |tx |,高度扩大 | ty |。 2. 3. 2 图像的旋转 一般图像的旋转是以图像的中心为原点,旋转一定的角度。 旋转后,图像的大小一般会改变。 和图像平移一样,既可以把转出显示区域的图像截去,也可以扩大图像范围以显示所有的图像。 可以推导一下旋转运算的变换公式。 如下图所示,点( x0, y0)经过旋转θ度后坐标变成( x1, y1)。 在旋转前: )sin(0 )c os (0 ry rx 旋转后: )c os (0)s i n(0)s i n()c os ()c os ()s i n()s i n(1 )s i n(0)c os (0)s i n()s i n()c os ()c os ()c os (1 yxrrry yxrrrx 写成矩阵表 达式为: 1001000)c o s ()s in (0)s in ()c o s (111yxyx 2. 3. 3 图像的缩放 图像的缩放操作将会改变图像的大小,产生的图像中的像素可能在原图中找不到相应的像素点,这样就必须进行近似处理。 一般的方法是直接赋值为和它最MFC 图像变换软件的设计与实现 10 相近的像素值,也可以通过一些插值算法来计算。 假设图像 x轴方向缩放比率为 fx, y轴方向缩放比率为 fy,那么原图中点( x0,y0)对应与新图中的点( x1, y1)的转换矩阵为: 1001000000111yxfyfxyx 其逆运算如下: 。mfc图像变换系统的设计与实现毕业论文(编辑修改稿)
相关推荐
输入 CPU 18 CS ADS7844E片选信号 CPU 19 DCLK 串行口时钟 CPU 液晶显示及驱动电路 HT1621B 是 128 点内存映象和多功能的 LCD 驱动器, HT1621B 的软件配置特性使它适用于多种 LCD 应用场合,包括 LCD 模块和显示子系统,用于连接主控制器和 HT1621 的管脚只有 4 或 5 条, HT1621 还有一个节电命令用于降低系统功耗。 第
RNA 数量众多,为防止混淆,除最早发现的 lin4, let7 及 lsy6之外,研究者们对于其他 miRNA 统一用 miR(为数字 )表示,其基因则记为mir(为相应数字 )。 高度同源的 miRNA 在其后加英文字母加以区别,多拷贝miRNA 基因再其后再加数字。 ( 1) 除了 lin4 和 let7 外,其他 miRNA 统一用 miR(为数字 )表示, mir(代表数字
可以动态调整,以适应不同的标准和环境 ; 各通 信标准对应各自的软件 模块,多模通信设备的实现可以简单地转化为对多个软件模块的 灵活调用。 在采用软件无线电实现的通信设备中,绝大部分的信号处理模块由运行在通用运算单元 GPP( Generalpurpose processor,例如通用 CPU、 GPU 等)上 的 软件 实现。 通常 情况下, GPP 还 运行 除通信模块以外的其它软件
称为滞后校正。 (3)超前滞后校正装置 校正装置在某一频率范围内具有负的相角特性,而在另一频率范围内却具有 正的相角特性,这种校正装置称为超前滞后校正装置,对系统的校正称为超前滞 后校正。 根据校正装置与被控对象的不同连接方式,可分为串联校正、反馈 (并联 ) 校正、前馈校正和干扰补偿等。 串联校正和并联校正是最常见的两种校正方式。 (1)串联校正 如果校正元件与系 统的不可变部分串联起来,如图
际上是一个 1 行 9列向量。 构成矩阵或向量的行字符串长度必须相同。 可以使用 char 函数构建字符数组,使用 strcat 函数连接字符。 常用的字符操作函数 findstr(s1,s2) 搜索字符串 ischar(s) 判断是否字符串 strcmp(s1,s2) 比较字符串是否相同 strncmp(s1,s2,n) 比较字符串中的前 n 个字符是否相同 第二章 Matlab 的 简介
复杂雕刻曲面 . 2 Mastercam X 铣削加工 图 21 零件图 创建实体 设置构图环境 ( 1) 单击 创建一个新的绘图文件。 ( 2)在状态栏 构图面 . . . 中选取【俯视图( t)( WCS)】。 MastercamX 外形铣削加工工艺与设计 7 绘制辅助线 ( 1)在状态栏线型图标 中设置中心线的线型。 ( 2)在状态颜色块 中采 用默认颜色。 ( 3)在状态栏线宽图标