VOID Balls::draw(Graphics *graphics, Image *images[]) const { ImageAttributes imAttr; imAttr.SetColorKey(COLOR_KEY, COLOR_KEY); for(size_t i = 0; i < NUMBER_OF_BALLS; i++) graphics->DrawImage(images[i], Rect(static_cast<INT>(points_[i].getX()) - RShari, static_cast<INT>(points_[i].getY()) - RShari, 2 * RShari, 2 * RShari), 0, 0, 2 * RShari, 2 * RShari, Unit::UnitPixel, &imAttr, 0); }
VOID Cue::draw(Graphics *pGraphics, Pen &rPen, Image &rCue) const { auxiliaryLine_.draw((ball_ - auxiliaryLine_).getX(), (ball_ - auxiliaryLine_).getY(), pGraphics, rPen, static_cast<ARGB>(Color::Gray)); rPen.SetColor(static_cast<ARGB>(Color::Gray)); rPen.SetWidth(3); pGraphics->DrawEllipse(&rPen, static_cast<INT>(mouse_.getX() - RShari), static_cast<INT>(mouse_.getY() - RShari), RShari * 2, RShari * 2); pGraphics->TranslateTransform(static_cast<REAL>(ball_.getX()), static_cast<REAL>(ball_.getY())); pGraphics->RotateTransform(angle_); ImageAttributes imAttr; imAttr.SetColorKey(COLOR_KEY, COLOR_KEY); pGraphics->DrawImage(&rCue, Rect(static_cast<INT>(-884 - force_ * 8), static_cast<INT>(-20 / 2), 884 * 2, 20), 0, 0, 884 * 2, 20, Unit::UnitPixel, &imAttr, 0); pGraphics->ResetTransform(); }
/// 加入一张图片,图片横向分成几帧,带关键色 /// @param[in] const wchar_t pszFileName* 图片文件名(Unicode) /// @param[in] int nCutInHor 横向分成几帧 void CWndAnimate::AppendPNG(const wchar_t *pszFileName, COLORREF clrKey, int nCutInHor) { Image *img = NULL; img = InitImageFromPkg(pszFileName); if (NULL == img) { return; } if (img->GetWidth()<=0 || img->GetHeight()<=0) { return; } ImageAttributes ima; ima.SetColorKey(Color(0, GetRValue(clrKey), GetGValue(clrKey), GetBValue(clrKey)), Color(255, GetRValue(clrKey), GetGValue(clrKey), GetBValue(clrKey))); for (int i=0; i<nCutInHor; ++i) { CMemdc memDC; memDC.Create(GetDC()->GetSafeHdc(), img->GetWidth()/nCutInHor, img->GetHeight()); /// 绘图 Graphics grac(memDC.GetCompatibleDC()); grac.DrawImage(img, Rect(0, 0, memDC.GetWidth(), memDC.GetHeight()), img->GetWidth()/nCutInHor*i, 0, img->GetWidth()/nCutInHor, img->GetHeight(), UnitPixel, &ima); grac.ReleaseHDC(memDC.GetCompatibleDC()); m_FrameList.push_back(memDC); m_nFrameCount ++; } delete img; img = NULL; }
// *************************************************************** // InitImageAttributes() // *************************************************************** void TilesDrawer::InitImageAttributes(TileManager* manager, ImageAttributes& attr) { attr.SetWrapMode(WrapModeTileFlipXY); if (!manager->IsBackground()) { Gdiplus::ColorMatrix m = ImageHelper::CreateMatrix(manager->contrast, manager->brightness, manager->saturation, manager->hue, 0.0f, RGB(255, 255, 255), false, manager->get_Alpha() / 255.0f); attr.SetColorMatrix(&m); if (manager->useTransparentColor) { Gdiplus::Color color(GetRValue(manager->transparentColor), GetGValue(manager->transparentColor), GetBValue(manager->transparentColor)); attr.SetColorKey(color, color); } } }