+ -
当前位置:首页 → 问答吧 → c++ 图像平移画布变大

c++ 图像平移画布变大

时间:2011-12-09

来源:互联网

/*************************************************************************
 * 函数名称:
 * TranslationDIB1()
 * 参数:
 * LPSTR lpDIBBits - 指向源DIB图像指针
 * LONG lWidth - 源图像宽度(象素数)
 * LONG lHeight - 源图像高度(象素数)
 * LONG lXOffset - X轴平移量(象素数)
 * LONG lYOffset - Y轴平移量(象素数)
 * 返回值:
 * BOOL - 平移成功返回TRUE,否则返回FALSE。
 * 说明:
 * 该函数用来水平移动DIB图像。函数不会改变图像的大小,移出的部分图像
 * 将截去,空白部分用白色填充。
 ************************************************************************/
BOOL CDibImage::TranslationDIB1(LPSTR lpDIBBits, LONG lWidth, LONG lHeight, 
LONG lXOffset, LONG lYOffset)
{
LPSTR lpSrc; // 指向源图像的指针
LPSTR lpDst; // 指向要复制区域的指针
LPSTR lpNewDIBBits; // 指向复制图像的指针
HLOCAL hNewDIBBits;
LONG i; // 象素在新DIB中的坐标
LONG j;
LONG i0; // 象素在源DIB中的坐标
LONG j0;
LONG lLineBytes; // 图像每行的字节数

lLineBytes = WIDTHBYTES(lWidth * 8);// 计算图像每行的字节数

// 暂时分配内存,以保存新图像
hNewDIBBits = LocalAlloc(LHND, (lLineBytes+lXOffset) * (lHeight+lYOffset));
if (hNewDIBBits == NULL)
{
return FALSE;
}

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) + j
lpDst = (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
* ((unsigned char*)lpDst) = 255;
}
}
}

// 复制平移后的图像
memcpy(lpDIBBits, lpNewDIBBits, (lLineBytes) * (lHeight));

LocalUnlock(hNewDIBBits);
LocalFree(hNewDIBBits);
return TRUE;
}


怎么让我的画布变大成 lWidth+lXOffset lHeight+lYOffset

作者: gao8467524   发布时间: 2011-12-09

该函数用来水平移动DIB图像。函数不会改变图像的大小,移出的部分图像
 * 将截去,空白部分用白色填充。


就是改变图像大小,移出的部分不截去

作者: gao8467524   发布时间: 2011-12-11

相关阅读 更多

热门下载

更多