
//开始合并
if (leftHeighter) //左图高{
for (i=0;i<newHeight;i++){
for (j=0;j<mergeLineBytes;j++){
if (j>=0 && j<=leftWidth-1 ){
if (i>=0 && i<rightHeight){
*(lpMerge+k*mergeLineBytes+l)=(unsigned char)(*(lpLeftImage+lpLeftfhdr->bfOffBits+leftLineBytes*i+j)); //先读取左图数据
l++;
if (l>=mergeLineBytes){
k++;
l=0;} }
if (i>=rightHeight && i<leftHeight){
*(lpMerge+k*mergeLineBytes+l)=(unsigned char)(*(lpLeftImage+lpLeftfhdr->bfOffBits+leftLineBytes*i+j));
l++;
if (l>=mergeLineBytes){ k++; l=0; } } }
if (j>=leftWidth && j<mergeLineBytes){
if (i>=0 && i< leftHeight-rightHeight) //剩下区域
{
*(lpMerge+k*mergeLineBytes+l)=(unsigned char)255;
l++;
if (l>=mergeLineBytes){ k++; l=0;}}
if (i>=leftHeight-rightHeight && i<leftHeight)
{
*(lpMerge+k*mergeLineBytes+l)=(unsigned char)(*(lpRightImage+lpRightfhdr->bfOffBits+rightLineBytes*(i-leftHeight+rightHeight)+j-leftWidth));
l++;
if (l>=mergeLineBytes){ k++; l=0;} } } } } }
if (rightHeighter) //右图高 {
for (i=0;i<newHeight;i++) {
for (j=0;j<mergeLineBytes;j++) {
if (j>=0 && j<=rightWidth-1 && i<=leftHeight-1) {
*(lpMerge+k*mergeLineBytes+l)=(unsigned char)(*(lpRightImage+lpRightfhdr->bfOffBits+rightLineBytes*i+j)); //首先读取右图数据
l++;
if (l>=mergeLineBytes) { k++; l=0; } }
if (j>=0 && j<=rightWidth-1 && i>=leftHeight){
*(lpMerge+k*mergeLineBytes+l)=(unsigned char)(*(lpRightImage+lpRightfhdr->bfOffBits+rightLineBytes*i+j));
l++;
if (l>=mergeLineBytes){ k++; l=0;} }
if (j>=rightWidth && j<=newWidth-1 && i<=leftHeight-1){
temp=j;
temp=temp-rightWidth;
*(lpMerge+k*mergeLineBytes+l)=(unsigned char)(*(lpLeftImage+lpLeftfhdr->bfOffBits+leftLineBytes*i+temp));
l++;
if (l>=mergeLineBytes){ k++; l=0; } }
if (j>=rightWidth && j<=newWidth-1 && i>=leftHeight){ //填充剩下
*(lpMerge+k*mergeLineBytes+l)=(unsigned char)255;
l++;
if (l>=mergeLineBytes){ k++; l=0;} } } } }
//写合并图像
RGBQUAD palette[256];
for (i=0;i<256;i++)
{ palette[i].rgbBlue=(BYTE)i;
palette[i].rgbGreen=(BYTE)i;
palette[i].rgbRed=(BYTE)i;
palette[i].rgbReserved=0; }
//****************************写入位图文件********************************/
CString strSaveFileType = "位图文件 (*.bmp;*.dib)|*.bmp; *.dib|All Files (*.*)|*.*||";
CFileDialog FileDlg(FALSE, "*.bmp", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, strSaveFileType);
CString strSaveFilePath;
if( FileDlg.DoModal() == IDOK ){
strSaveFilePath=FileDlg.GetPathName();}
CFile fileMerge;
CFileException fileEx; //原来是这里的问题,把&fileEx放在括号外面2007.1.30
if (!fileMerge.Open(strSaveFilePath,C:modeCreate | C:modeWrite,&fileEx)){
fileMerge.Close(); return;}
fileMerge.Write(lpMergefhdr,sizeof(BITMAPFILEHEADER));
fileMerge.Write(lpMergebmpinfo,sizeof(BITMAPINFOHEADER));
fileMerge.Write(palette,sizeof(RGBQUAD)*256);
fileMerge.Write(lpMerge,newWidth*newHeight);
fileMerge.Close();
GlobalUnlock(hLeftImageBuf);
GlobalFree(hLeftImageBuf);
GlobalUnlock(hRightImageBuf);
GlobalFree(hRightImageBuf);
leftFile.Close();
rightFile.Close();
GlobalUnlock(hMergeDIB);
GlobalFree(hMergeDIB);
delete [] leftimage;
- 上一篇:毕业前笔记整理-VC++图像处理(三)
- 下一篇:祝贺HALCON8.0正式发布