是图片呢,还是WPF的字体描边。
如果是字体描边,可以这样实现:
drawingContext.DrawGeometry(Fill, new Pen(Stroke, StrokeThickness), m_TextGeometry);
是想要这种效果么,很早之前刚好写过一篇博文,看看是否满足需求。
这种不行,你的这个字体调小后看就发现是模糊的,我想要不模糊的。
你的描边用黑色,但是你用放大镜看会发现有夹杂着不同深度的灰色;
而我给的参考图里只有黑色,而且永远只占一个像素点。
@HotSky:
@楚人Leo: 是放大,不是字体调大,
@楚人Leo: 你的这个放大后看是模糊的,而且不管字体多大,我只需要1像素的描边就行。
@HotSky:
这是代码:
<panAndZoom:ZoomBorder Name="ZoomBorder"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Background="NavajoWhite"
ClipToBounds="True"
Focusable="True"
Stretch="None"
ZoomSpeed="1.2">
<outlinedText:OutlinedText HorizontalAlignment="Center"
VerticalAlignment="Center"
Bold="True"
Fill="White"
Font="Consolas"
FontSize="16"
Italic="True"
Stroke="Black"
StrokeThickness="1"
Text="OutlinedText" />
</panAndZoom:ZoomBorder>
这是效果图,16号的字体,使用TranslateTransform进行矩阵变换放大字体,和字号没关系的。
文字生成几何图形使用的是FormattedText的BuildGeometry方法。将几何图形渲染绘制使用的DrawingContext 的DrawGeometry方法以及Pen实例。
这里重点说明FormattedText构造函数的pixelsPerDip参数,按“密度无关像素”单位计算的像素值,等效于比例因子。 例如,如果屏幕的 DPI 为 120(或 1.25,因为 120/96 = 1.25),那么“密度无关像素”值为 1.25。 DPI 是 WPF 采用的独立于设备分辨率和 DPI 的度量单位。(Windows上一般默认是96 dpi 作为100% 的缩放比率)
如果用放大镜看像素没对齐,则需要将SnapsToDevicePixels属性设为True。
关于创建带轮廓的文本,MSDN上有详细描述。
最后有必要说明一下,基本上(认知有限,不敢说任何)矢量几何图形渲染,最后都是变成栅格图像,以矩阵形式排列,然后绘制到屏幕上。
平时说的抗锯齿、放大不模糊,都是实时渲染算法功劳。不管是GDI+还是Direct2D,如果只是针对渲染后的单个栅格图像放大都会模糊。
你要是有更好的办法,欢迎分享!
@楚人Leo: 我没有说明白,我说的放大是对生成的文字用截图软件(比如qq截图)截图,然后对图片放大,放大后看到的颜色不能出现混合色。比如你拿我的那个参考图放大后,描边黑色还是黑色,不会出现夹杂各种深度的灰色。
@HotSky: 那应该是抗锯齿生成的过渡色。
这是文字还是图片?图片的话,opencv读取,进行二值化,直接描边。