当前位置: 首页>>代码示例>>C++>>正文


C++ CDib::Depth方法代码示例

本文整理汇总了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;
    }
}
开发者ID:jimmccurdy,项目名称:ArchiveGit,代码行数:81,代码来源:RotateImage.cpp


注:本文中的CDib::Depth方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。