首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字母间距与DrawString?

字母间距与DrawString?
EN

Stack Overflow用户
提问于 2017-08-10 06:15:55
回答 1查看 2K关注 0票数 0

在回答C#字符串字母间距关于字母间距的旧帖子时,我看到:

代码语言:javascript
复制
[DllImport("gdi32.dll", CharSet=CharSet.Auto)] 
public static extern int SetTextCharacterExtra( 
    IntPtr hdc,    // DC handle
    int nCharExtra // extra-space value 
); 

public void Draw(Graphics g) 
{ 
    IntPtr hdc = g.GetHdc(); 
    SetTextCharacterExtra(hdc, 24); //set spacing between characters 
    g.ReleaseHdc(hdc); 

    e.Graphics.DrawString("str",this.Font,Brushes.Black,0,0); 
}  

我尝试了正数和负数(转换为VB.NET),但没有任何效果。它是一个有效的代码块还是不正确的?

代码语言:javascript
复制
  <DllImport("gdi32.dll", CharSet:=CharSet.Auto)> _
    Public Shared Function SetTextCharacterExtra(ByVal hdc As IntPtr, ByVal nCharExtra As Integer) As Integer
        ' extra-space value
    End Function

在一个功能上:

代码语言:javascript
复制
 With gClsGraphics1
            'Drawstring
            .SmoothingMode = SmoothingMode.HighQuality
            .TextRenderingHint = Text.TextRenderingHint.ClearTypeGridFit
            .CompositingQuality = CompositingQuality.HighQuality

            Dim hdc As IntPtr = .GetHdc()
            SetTextCharacterExtra(hdc, 30)
           .ReleaseHdc(hdc)

        End With
EN

回答 1

Stack Overflow用户

发布于 2017-08-13 08:38:22

这不是你文章正文中问题的答案,只是标题中问题的一个解决办法。

因此,虽然我甚至不尝试使用任何遗留函数,但我只是在普通字符之间添加空格。

使用普通空间可能比较粗糙,但还有其他一些不错的空白字符

代码语言:javascript
复制
char thin_space = (char)0x2009;
char hair_space = (char)0x200a;
char narrow_nbr_space = (char)0x202f;

使用这样的简单函数:

代码语言:javascript
复制
string spaced(string text, int spacing, char space)
{
    string spaces = "".PadLeft(spacing, space);
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < text.Length; i++) sb.Append(text[i] + spaces);
    return sb.ToString().Trim(space);
}

..you可以观察到有趣的差异:

正如您所看到的,对于单行文本,发空间将允许对伪字符间距进行最好的调整;但对于多行文本,则更倾向于使用不间断的空间。不过,它仍将允许在线条前面留出空白。

但是,由于没有实用的方法,或者至少对于缺少的行距没有简单的解决办法,因此得出的结论仍然是: GDI+中的字体支持是贫穷的

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45605800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档