本文整理汇总了C++中CDib::Depth方法的典型用法代码示例。如果您正苦于以下问题:C++ CDib::Depth方法的具体用法?C++ CDib::Depth怎么用?C++ CDib::Depth使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CDib
的用法示例。
在下文中一共展示了CDib::Depth方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: RotateImage
void RotateImage(const BITMAPINFOHEADER* pDibSrc, const BITMAPINFOHEADER* pDibDst, double fAngle, double fScale)
{
CDib DibSrc = pDibSrc;
CDib DibDst = pDibDst;
int dxSrc = DibSrc.Width();
int dySrc = DibSrc.Height();
int dxDst = DibDst.Width();
int dyDst = DibDst.Height();
int lxSrc = dxSrc - 1; // Last X
int lySrc = dySrc - 1; // Last Y
double fAngleRadian = fAngle * PIdiv180;
double duCol = sin(fAngleRadian) * (1.0 / fScale);
double dvCol = cos(fAngleRadian) * (1.0 / fScale);
double duRow = dvCol;
double dvRow = -duCol;
double fcxSrc = dxSrc / 2;
double fcySrc = dySrc / 2;
double fcxDst = dxDst / 2;
double fcyDst = dyDst / 2;
double uRow = fcxSrc - (fcxDst * dvCol + fcyDst * duCol);
double vRow = fcySrc - (fcxDst * dvRow + fcyDst * duRow);
int iDepth = DibDst.Depth();
for (int y = 0; y < dyDst; y++)
{
double u = uRow;
double v = vRow;
BYTE* pDst = DibDst.PtrXYExact(0, y);
for (int x = 0; x < dxDst ; x++)
{
int sx = dtoi(u);
int sy = dtoi(v);
bool bInside = (sx >= 0 && sx <= lxSrc && sy >= 0 && sy <= lySrc);
if (!bInside)
{ // Allow a 2 pixel edge to avoid seeing any mismatch with the clip rectangle
bool bInsideEdge = (sx >= -2 && sx <= lxSrc+3 && sy >= -2 && sy <= lySrc+3);
if (bInsideEdge)
{
if (sx >= -2 && sx < 0) sx = 0;
if (sx <= lxSrc+3 && sx > lxSrc) sx = lxSrc;
if (sy >= -2 && sy < 0) sy = 0;
if (sy <= lySrc+3 && sy > lySrc) sy = lySrc;
bInside = (sx >= 0 && sx <= lxSrc && sy >= 0 && sy <= lySrc);
}
}
if (bInside)
{
BYTE* pSrc = DibSrc.PtrXYExact(sx, sy);
*pDst++ = *pSrc++;
if (iDepth == 3)
{
*pDst++ = *pSrc++;
*pDst++ = *pSrc++;
}
}
else
{
*pDst++ = 255;
if (iDepth == 3)
{
*pDst++ = 255;
*pDst++ = 255;
}
}
u += duRow;
v += dvRow;
}
uRow += duCol;
vRow += dvCol;
}
}