本文整理汇总了C++中gdiplus::GraphicsPath::GetBounds方法的典型用法代码示例。如果您正苦于以下问题:C++ GraphicsPath::GetBounds方法的具体用法?C++ GraphicsPath::GetBounds怎么用?C++ GraphicsPath::GetBounds使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类gdiplus::GraphicsPath
的用法示例。
在下文中一共展示了GraphicsPath::GetBounds方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: DrawTextOutline
BOOL GdiplusUtilities::DrawTextOutline(Gdiplus::Graphics& graphics,
LPCTSTR lpchText, int cchText, const Gdiplus::Rect& rc, const Gdiplus::StringFormat& format,
const Gdiplus::Font& font, Gdiplus::Color fill, Gdiplus::Color outline, INT outlineWidth,
BOOL bCalcOnly/* = FALSE*/, Gdiplus::Rect* rcCalc/* = NULL*/)
{
Gdiplus::FontFamily fontFamily;
font.GetFamily(&fontFamily);
Gdiplus::GraphicsPath path;
path.AddString(lpchText, cchText, &fontFamily, font.GetStyle(), font.GetHeight(&graphics), rc, &format);
if (rcCalc != NULL)
{
path.GetBounds(rcCalc);
rcCalc->Inflate(outlineWidth, outlineWidth);
}
if (bCalcOnly)
return TRUE;
Gdiplus::Pen pen(outline, (Gdiplus::REAL) outlineWidth);
if (graphics.DrawPath(&pen, &path) == Gdiplus::Ok)
{
Gdiplus::SolidBrush brush(fill);
return graphics.FillPath(&brush, &path) == Gdiplus::Ok;
}
return FALSE;
}
示例2: getTxtSize
static Gdiplus::Size getTxtSize(std::wstring txt) {
Gdiplus::GraphicsPath path;
Gdiplus::FontFamily ff;
Gdiplus::Font* font = g_lv.f;
font->GetFamily(&ff);
Gdiplus::Rect rc;
Gdiplus::Size sz;
int len = txt.length();
if (len == 0) {
return sz;
}
bool is_space = false;
if (txt[len - 1] == L' ') {
txt[len - 1] = L'M';
is_space = true;
}
path.AddString(txt.c_str(),
len, &ff,
font->GetStyle(),
font->GetSize(),
Gdiplus::Point(1, 0),
NULL);
path.GetBounds(&rc);
int sd = (int)(font->GetSize() / 4);
sz.Width = rc.Width + sd;
if (is_space) {
sz.Width -= sd;
}
sz.Height = rc.Height;
return sz;
}
示例3: DrawImage
void CSkinUnitODL::DrawImage(Gdiplus::Graphics& gcDrawer, Gdiplus::GraphicsPath& gcPath, Gdiplus::PointF& ptOffset, Gdiplus::REAL fScale)
{
if (m_imgSkin)
{
if (m_nWrapMode>=4)
{
//居中模式
Gdiplus::RectF rtArea;
gcPath.GetBounds(&rtArea);
Gdiplus::GraphicsPath gcDrawPath;
//图片中间X:(width-imagewidth )/2 + left;
//Y: (height - imageheight)/2 +top;
Gdiplus::REAL fX0 = (rtArea.Width - m_fSkinWidth-m_nGroutX) /2.0f + rtArea.X;
Gdiplus::REAL fY0 = (rtArea.Height - m_fSkinHeight-m_nGroutY) /2.0f + rtArea.Y;
Gdiplus::REAL fX1 = m_fSkinWidth + m_nGroutX+ fX0;
Gdiplus::REAL fY1 = m_fSkinHeight +m_nGroutY+ fY0;
std::vector<Gdiplus::PointF> arrPt;
arrPt.emplace_back(fX0, fY0);
arrPt.emplace_back(fX1, fY0);
arrPt.emplace_back(fX1, fY1);
arrPt.emplace_back(fX0, fY1);
Gdiplus::Matrix mx;
Gdiplus::PointF ptCenter=Gdiplus::PointF((fX1+fX0)/2.0f, (fY1+fY0)/2.0f);
mx.RotateAt(m_fRotate, ptCenter);
mx.TransformPoints(arrPt.data(), arrPt.size());
gcDrawPath.AddPolygon(arrPt.data(),arrPt.size());
//如果图片的path大于当前区域Path,则居中操作在区域内
{
BRepBuilderAPI_MakePolygon ply1;
for (auto& ptPos:arrPt)
{
ply1.Add(gp_Pnt(ptPos.X, 0.0f, ptPos.Y));
}
ply1.Close();
TopoDS_Face face1 = BRepBuilderAPI_MakeFace(ply1.Wire()).Face();
std::vector<Gdiplus::PointF> arrPic;
arrPic.resize(gcDrawPath.GetPointCount());
gcPath.GetPathPoints(arrPic.data(), arrPic.size());
BRepBuilderAPI_MakePolygon ply2;
for (auto& ptPos:arrPic)
{
ply2.Add(gp_Pnt(ptPos.X, 0.0f, ptPos.Y));
}
ply2.Close();
TopoDS_Face face2 = BRepBuilderAPI_MakeFace(ply2.Wire()).Face();
BRepAlgoAPI_Common bc(face1, face2);
auto face = bc.Shape();
TopExp_Explorer expWire(face, TopAbs_WIRE);
std::vector<Gdiplus::PointF> arrDraw;
for ( BRepTools_WireExplorer expVertex(TopoDS::Wire(expWire.Current())); expVertex.More(); expVertex.Next() )
{
auto pnt = BRep_Tool::Pnt(expVertex.CurrentVertex());
arrDraw.emplace_back(static_cast<Gdiplus::REAL>(pnt.X()), static_cast<Gdiplus::REAL>(pnt.Z()));
}
gcDrawPath.Reset();
gcDrawPath.AddPolygon(arrDraw.data(), arrDraw.size());
}
Gdiplus::WrapMode wmMode=(Gdiplus::WrapMode)m_nWrapMode;
if (std::fabs(m_fRotate)<0.001f)
{
Gdiplus::TextureBrush brush(m_imgSkin, wmMode);
mx.Translate(fX0, fY0);
brush.SetTransform(&mx);
gcDrawer.FillPath(&brush, &gcDrawPath);
}
else
{
Gdiplus::TextureBrush brush(m_imgSkin, wmMode);
mx.Translate(fX0, fY0);
brush.SetTransform(&mx);
gcDrawer.FillPath(&brush, &gcDrawPath);
}
}
else
{
//铺满模式
Gdiplus::WrapMode wmMode=(Gdiplus::WrapMode)m_nWrapMode;
if (std::fabs(m_fRotate)<0.001f)
{
Gdiplus::TextureBrush brush(m_imgSkin, wmMode);
brush.TranslateTransform(ptOffset.X, ptOffset.Y);
gcDrawer.FillPath(&brush, &gcPath);
}
else
{
Gdiplus::TextureBrush brush(m_imgSkin, wmMode);
brush.TranslateTransform(ptOffset.X, ptOffset.Y);
brush.RotateTransform(m_fRotate);
gcDrawer.FillPath(&brush, &gcPath);
}
}
}
}