本文整理汇总了C++中CG32bitImage::AdjustCoords方法的典型用法代码示例。如果您正苦于以下问题:C++ CG32bitImage::AdjustCoords方法的具体用法?C++ CG32bitImage::AdjustCoords怎么用?C++ CG32bitImage::AdjustCoords使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CG32bitImage
的用法示例。
在下文中一共展示了CG32bitImage::AdjustCoords方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: if
void CG8bitSparseImage::MaskFill (CG32bitImage &Dest, int xDest, int yDest, int cxDest, int cyDest, int xSrc, int ySrc, CG32bitPixel rgbColor) const
// MaskFill
//
// Fills the destination image with the given color through our mask.
{
// Make sure we're in bounds
if (!Dest.AdjustCoords(&xSrc, &ySrc, GetWidth(), GetHeight(),
&xDest, &yDest,
&cxDest, &cyDest))
return;
// Short-circuit
if (rgbColor.GetAlpha() == 0x00)
return;
// Compute a pre-multiplied color
BYTE *pAlpha = CG32bitPixel::AlphaTable(rgbColor.GetAlpha());
CG32bitPixel rgbPreMultColor = CG32bitPixel(pAlpha[rgbColor.GetRed()], pAlpha[rgbColor.GetGreen()], pAlpha[rgbColor.GetBlue()], rgbColor.GetAlpha());
// Loop
int yPos = ySrc;
int yPosEnd = ySrc + cyDest;
int yTile = yPos / m_cyTile;
int yOffset = ClockMod(yPos, m_cyTile);
int xTileStart = xSrc / m_cxTile;
int xOffsetStart = ClockMod(xSrc, m_cxTile);
int yDestPos = yDest;
while (yPos < yPosEnd)
{
int cyTileLeft = Min(m_cyTile - yOffset, yPosEnd - yPos);
// Is this a valid tile row, then continue
if (yTile >= 0 && yTile < m_yTileCount)
{
int xPos = xSrc;
int xPosEnd = xSrc + cxDest;
int xTile = xTileStart;
int xOffset = xOffsetStart;
int xDestPos = xDest;
while (xPos < xPosEnd)
{
int cxTileLeft = Min(m_cxTile - xOffset, xPosEnd - xPos);
// If this is a valid tile, then we can continue
if (xTile >= 0 && xTile < m_xTileCount)
{
const CNode &Tile = GetTile(xTile, yTile);
switch (Tile.GetType())
{
case typeByte:
{
BYTE byAlpha = Tile.GetByte();
if (byAlpha == 0x00)
{}
else if (byAlpha == 0xff)
Dest.Fill(xDestPos, yDestPos, cxTileLeft, cyTileLeft, rgbColor);
else
// We just modify the alpha on the original color (Fill will take care of the rest)
Dest.Fill(xDestPos, yDestPos, cxTileLeft, cyTileLeft, CG32bitPixel(rgbColor, CG32bitPixel::BlendAlpha(rgbColor.GetAlpha(), byAlpha)));
break;
}
case typeNodeArray:
{
CNode *Rows = Tile.GetNodeArray();
CNode *pSrcRow = Rows + yOffset;
CNode *pSrcRowEnd = pSrcRow + cyTileLeft;
CG32bitPixel *pDestRow = Dest.GetPixelPos(xDestPos, yDestPos);
while (pSrcRow < pSrcRowEnd)
{
CG32bitPixel *pDest = pDestRow;
CG32bitPixel *pDestEnd = pDestRow + cxTileLeft;
switch (pSrcRow->GetType())
{
case typeByte:
{
BYTE byAlpha = pSrcRow->GetByte();
if (byAlpha == 0x00)
{}
else if (byAlpha == 0xff)
{
BYTE byFillAlpha = rgbColor.GetAlpha();
if (byFillAlpha == 0xff)
{
while (pDest < pDestEnd)
*pDest++ = rgbColor;
//.........这里部分代码省略.........