问题描述
我需要使用 GDI+ 在透明位图上绘制抗锯齿文本。在 C# 中,它完全按照需要工作——抗锯齿是通过 alpha 通道完成的。但是,在 C++ 中,文本与黑色背景混合,当叠加在非黑色背景上时会导致黑色边框。
位图在托管代码中创建,设备上下文句柄通过 P/Invoke 传递给本机代码:
var bitmap = new Bitmap(1024,768,PixelFormat.Format32bppArgb);
var g = Graphics.FromImage(bitmap);
g.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
g.SmoothingMode = SmoothingMode.AntiAlias;
// c# text drawn here
var gHandle = g.GetHdc();
NativeMethods.Draw(gHandle);
g.ReleaseHdc(gHandle);
而原生的 draw 方法是这样的:
void Draw(HDC hdc)
{
Gdiplus::Graphics g(hdc);
g.SetSmoothingMode(Gdiplus::SmoothingModeAntiAlias);
g.SetTextRenderingHint(Gdiplus::TextRenderingHintAntiAliasGridFit);
// c++ text drawn here
}
有什么想法为什么原生渲染会以不同的方式进行,以及是否可以使其像托管渲染一样工作?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)