问题描述
/**************************************************************************函数名称:*TranslationDIB1()*参数:*LPSTRlpDIBBits-指向源DIB图像指针*LONGlWidth-源图像宽度(象素数)*LONGlHeight-源图像高度(象素数)*LONGlXOffset-X轴平移量(象素数)*LONGlYOffset-Y轴平移量(象素数)*返回值:*BOOL-平移成功返回TRUE,否则返回FALSE。*说明:*该函数用来水平移动DIB图像。函数不会改变图像的大小,移出的部分图像*将截去,空白部分用白色填充。************************************************************************/BOOLCDibImage::TranslationDIB1(LPSTRlpDIBBits,LONGlWidth,LONGlHeight,LONGlXOffset,LONGlYOffset){LPSTRlpSrc;//指向源图像的指针LPSTRlpDst;//指向要复制区域的指针LPSTRlpNewDIBBits;//指向复制图像的指针HLOCALhNewDIBBits;LONGi;//象素在新DIB中的坐标LONGj;LONGi0;//象素在源DIB中的坐标LONGj0;LONGlLineBytes;//图像每行的字节数lLineBytes=WIDTHBYTES(lWidth*8);//计算图像每行的字节数//暂时分配内存,以保存新图像hNewDIBBits=LocalAlloc(LHND,(lLineBytes+lXOffset)*(lHeight+lYOffset));if(hNewDIBBits==NULL){returnFALSE;}lpNewDIBBits=(char*)LocalLock(hNewDIBBits);for(i=0;i<lHeight;i++)//每行{for(j=0;j<lWidth;j++)//每列{//指向新DIB第i行,第j个象素的指针//注意由于DIB中图像第一行其实保存在最后一行的位置,因此lpDst//值不是(char*)lpNewDIBBits+lLineBytes*i+j,而是//(char*)lpNewDIBBits+lLineBytes*(lHeight-1-i)+jlpDst=(char*)lpNewDIBBits+lLineBytes*(lHeight-1-i)+j;////计算该象素在源DIB中的坐标i0=i-lXOffset;j0=j-lYOffset;//判断是否在源图范围内if((j0>=0)&&(j0<lWidth)&&(i0>=0)&&(i0<lHeight)){//指向源DIB第i0行,第j0个象素的指针//同样要注意DIB上下倒置的问题lpSrc=(char*)lpDIBBits+(lLineBytes)*(lHeight-1-i0)+j0;*lpDst=*lpSrc;//复制象素}else{//对于源图中没有的象素,直接赋值为255*((unsignedchar*)lpDst)=255;}}}//复制平移后的图像memcpy(lpDIBBits,lpNewDIBBits,(lLineBytes)*(lHeight));LocalUnlock(hNewDIBBits);LocalFree(hNewDIBBits);returnTRUE;}怎么让我的画布变大成lWidth+lXOffsetlHeight+lYOffset
解决方案
解决方案二:
该函数用来水平移动DIB图像。函数不会改变图像的大小,移出的部分图像*将截去,空白部分用白色填充。就是改变图像大小,移出的部分不截去
解决方案三:
该回复于2011-12-12 11:39:15被版主删除