本文整理汇总了C++中CG32bitImage::CreateFromImageTransformed方法的典型用法代码示例。如果您正苦于以下问题:C++ CG32bitImage::CreateFromImageTransformed方法的具体用法?C++ CG32bitImage::CreateFromImageTransformed怎么用?C++ CG32bitImage::CreateFromImageTransformed使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CG32bitImage
的用法示例。
在下文中一共展示了CG32bitImage::CreateFromImageTransformed方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: SetShipClassImage
void CNewGameSession::SetShipClassImage (CShipClass *pClass, int x, int y, int cxWidth)
// SetShipClassImage
//
// Sets the current ship class image
{
const CPlayerSettings *pPlayerSettings = pClass->GetPlayerSettings();
// Ask the class for a hero image
const CG32bitImage *pImage = (!pClass->GetHeroImage().IsEmpty() ? &pClass->GetHeroImage().GetImage(CONSTLIT("New Game")) : NULL);
// Delete the previous one
DeleteElement(ID_SHIP_CLASS_IMAGE);
// Add the new one, if we've got one.
const CG32bitImage *pImageToUse = NULL;
bool bFree = false;
if (pImage && !pImage->IsEmpty())
{
// If this image is not the right size, then create a resized version
// that is.
if (pImage->GetWidth() != SHIP_IMAGE_WIDTH || pImage->GetHeight() != SHIP_IMAGE_HEIGHT)
{
int cxNewWidth = SHIP_IMAGE_WIDTH;
int cyNewHeight = cxNewWidth * pImage->GetHeight() / pImage->GetWidth();
if (cyNewHeight > SHIP_IMAGE_HEIGHT)
{
cyNewHeight = SHIP_IMAGE_HEIGHT;
cxNewWidth = cyNewHeight * pImage->GetWidth() / pImage->GetHeight();
}
CG32bitImage *pNewImage = new CG32bitImage;
pNewImage->CreateFromImageTransformed(*pImage, 0, 0, pImage->GetWidth(), pImage->GetHeight(), (Metric)cxNewWidth / pImage->GetWidth(), (Metric)cyNewHeight / pImage->GetHeight(), 0.0);
pImageToUse = pNewImage;
bFree = true;
}
else
{
pImageToUse = pImage;
bFree = false;
}
}
// If we don't have an image then ask the class to paint it
else
{
CG32bitImage *pNewImage = new CG32bitImage;
pNewImage->Create(SHIP_IMAGE_WIDTH, SHIP_IMAGE_HEIGHT);
ViewportTransform Trans;
pClass->Paint(*pNewImage,
SHIP_IMAGE_WIDTH / 2,
SHIP_IMAGE_HEIGHT / 2,
Trans,
0,
0
);
pImageToUse = pNewImage;
bFree = true;
}
// Position
int xImage = x + (cxWidth - pImageToUse->GetWidth()) / 2;
int yImage = y + (SHIP_IMAGE_HEIGHT - pImageToUse->GetHeight()) / 2;
// New image frame
bool bAutoMask = (pClass->GetAPIVersion() < 26);
IAnimatron *pImageFrame = new CAniRect;
pImageFrame->SetID(ID_SHIP_CLASS_IMAGE);
pImageFrame->SetPropertyVector(PROP_POSITION, CVector(xImage, yImage));
pImageFrame->SetPropertyVector(PROP_SCALE, CVector(pImageToUse->GetWidth(), pImageToUse->GetHeight()));
pImageFrame->SetFillMethod(new CAniImageFill(pImageToUse, bFree, bAutoMask));
m_pRoot->AddLine(pImageFrame);
}
示例2: CreateIcon
void CExtension::CreateIcon (int cxWidth, int cyHeight, CG32bitImage **retpIcon) const
// CreateIcon
//
// Creates a cover icon for the adventure. The caller is responsible for
// freeing the result.
{
// Load the image
CG32bitImage *pBackground = GetCoverImage();
if (pBackground == NULL || pBackground->GetWidth() == 0 || pBackground->GetHeight() == 0)
{
int cxSize = Min(cxWidth, cyHeight);
*retpIcon = new CG32bitImage;
(*retpIcon)->Create(cxSize, cxSize);
return;
}
// Figure out the dimensions of the icon based on the image size and the
// desired output.
//
// If the background is larger than the icon size then we need to scale it.
CG32bitImage *pIcon;
if (pBackground->GetWidth() > cxWidth || pBackground->GetHeight() > cyHeight)
{
int xSrc, ySrc, cxSrc, cySrc;
Metric rScale;
// If we have a widescreen cover image and we want a portrait or
// square icon, then we zoom in on the key part of the cover.
if (pBackground->GetWidth() > 2 * pBackground->GetHeight())
{
rScale = (Metric)cyHeight / pBackground->GetHeight();
cxSrc = (int)(cxWidth / rScale);
xSrc = Min(pBackground->GetWidth() - cxSrc, pBackground->GetWidth() - (RIGHT_COVER_OFFSET + (cxSrc / 2)));
ySrc = 0;
cySrc = pBackground->GetHeight();
}
else
{
rScale = (Metric)cxWidth / pBackground->GetWidth();
if (rScale * pBackground->GetHeight() > (Metric)cyHeight)
rScale = (Metric)cyHeight / pBackground->GetHeight();
xSrc = 0;
ySrc = 0;
cxSrc = pBackground->GetWidth();
cySrc = pBackground->GetHeight();
}
// Create the icon
pIcon = new CG32bitImage;
pIcon->CreateFromImageTransformed(*pBackground,
xSrc,
ySrc,
cxSrc,
cySrc,
rScale,
rScale,
0.0);
}
// Otherwise we center the image on the icon
else
{
// Create the icon
pIcon = new CG32bitImage;
pIcon->Create(cxWidth, cyHeight);
// Blt
pIcon->Blt(0,
0,
pBackground->GetWidth(),
pBackground->GetHeight(),
*pBackground,
(cxWidth - pBackground->GetWidth()) / 2,
(cyHeight - pBackground->GetHeight()) / 2);
}
// Done
*retpIcon = pIcon;
}