利用 GDI+ 的反走樣與高質量插值:
// 1. GDI+ 初始化 ULONG_PTR gdiplusToken; GdiplusStartup(&gdiplusToken, &GdiplusStartupInput(), NULL); // 2. 目標矩形與字體 RectF destRect(rc.left, rc.top, rc.Width(), rc.Height()); FontFamily ff(L"Times New Roman"); Font font(&ff, 100, FontStyleBold, UnitPixel); Graphics g(hdc); // 3. 背景填充 g.FillRectangle(&SolidBrush(Color::LightSlateGray), destRect); // 4. 創建 1/4 尺寸位圖作為陰影層 Bitmap bmp(rc.Width()/4, rc.Height()/4, &g); Graphics* pTemp = Graphics::FromImage(&bmp); pTemp->SetTextRenderingHint(TextRenderingHintAntiAlias); // 5. 縮放矩陣:字體 1/4,陰影偏移 1/4 Matrix mx(0.25f, 0, 0, 0.25f, 3, 3); // 縮放 + 平移 pTemp->SetTransform(&mx); // 6. 繪製半透明陰影文字 pTemp->DrawString(str, -1, &font, PointF(0,0), NULL, &SolidBrush(Color(128,0,0,0))); // 50% 透明黑 // 7. 高質量插值放大繪製陰影 g.SetInterpolationMode(InterpolationModeHighQualityBicubic); g.SetTextRenderingHint(TextRenderingHintAntiAlias); g.DrawImage(&bmp, destRect, 0, 0, bmp.GetWidth(), bmp.GetHeight(), UnitPixel); // 8. 繪製前景白色文字 g.DrawString(str, -1, &font, PointF(0,0), NULL, &SolidBrush(Color::White)); // 9. 清理 delete pTemp; GdiplusShutdown(gdiplusToken);
gdiplus.lib,包含 gdiplus.h。GdiplusStartup,退出時 GdiplusShutdown。「先小後大 + 高質量插值」是 GDI+ 實現軟陰影的經典技巧。利用縮放過程中的像素插值自動生成漸變邊緣,避免了手動計算漸變或多層疊加的複雜度。代碼結構清晰:離屏繪製陰影層 → 縮放插值貼圖 → 繪製前景文字,三步完成專業級文字陰影效果。