你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 图形图象处理与游戏编程
BMP图像切割存储技术与实现(六)
 

// 4)输出目标图像

    pFile->Write((LPVOID) &bmfh, sizeof(BITMAPFILEHEADER));

    pFile->Write((LPVOID) m_lpBMIH_new,  nSizeHdr);

    pFile->Write((LPVOID) m_lpImage_new, m_lpBMIH_new->biSizeImage);

}

该函数是切割保存图像功能的主函数。m_LU:矩形左上角位置;m_RB:矩形右下角位置;pFile:输出目标图像文件的文件指针。

该函数共分为4部分,修改bitmapfileheaderbitmapinfoheaderDib bit Image以及输出目标图像,如程序中标注所示。各部分需要注意的地方如下:

1BitmapfileheaderbfSize不参与显示,一般不用修改。

2GetParam函数获得了原图像、目标图像的相关参数及原图像与目标图像间关系的参数,下面在对该函数的定义有详细介绍。

memcpy(m_lpBMIH_new, m_lpBMIH, nSize);将原图像的bitmapinfoheader拷贝过来修改后供目标图像使用。随后对该结构中目标图像的高、宽、像素区大小等信息进行了修改。

3   m_lpImage_new = (LPBYTE) new char[m_lpBMIH_new->biSizeImage]; 创建了目标图像的像素区。

CopyRow(m_lpSrc_Start, m_lpDes_Start, n_CopyByte, n_StartBit, n_EndBit, n_DesRowByte); 利用GetParam函数获得的相关参数,对目标图像进行逐行拷贝,该函数中包含对像素的移位操作。

4)将目标图像中的3部分内容写到目标图像文件中。

 

42GetParam函数

// 由原图像的biBitCount、切割矩形的左上、右下顶点位置,计算切割图像所需要的相关//参数

// biBitCount:图像类型;m_LU:切割矩形左上顶点;m_RB:切割矩形右下顶点;n_StartBye//切割矩形左上顶点在原图相应行中的字节位置;n_StartBit:切割矩形左上顶点的起始位//n_StartByte中的位置;n_EndByte:切割矩形右下顶点在原图相应行中的字节位置;//n_EndBit:切割矩形右下顶点的起始位在n_EndByte中的位置;n_OriRowByte:源图像每//行使用的字节数;n_DesRowByte:目标图像每行使用的字节数

BOOL CDib::GetParam(WORD biBitCount, const CPoint& m_LU, const CPoint& m_RB, int& n_StartByte, int& n_StartBit, int& n_EndByte, int& n_EndBit, int& n_OriRowByte,   int& n_DesRowByte)

{

    int n_OriWidth, n_DesWidth;

  推荐精品文章

·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089