如何在.net中使用GDI+中没有的windows GDI方法?

本文关键字:windows GDI 方法 GDI+ net | 更新日期: 2023-09-27 18:14:58

我想在。net应用程序中调用GDI+中找不到的GDI方法。

特别是这个方法,它获得指定字体的字距对。我想在HTML5画布上实现字距(字母间距),目前不支持,我认为最好的方法是在我的服务器上拉出字距对,并返回一个字距表给客户端。

如何在。net中使用像这样的windows库函数?

如何在.net中使用GDI+中没有的windows GDI方法?

你可以在Windows API中找到这个方法来调用这个方法:

  • 1:添加System.Runtime.InteropServices命名空间到你的项目
  • 2:将API类添加到您的项目中,并让它使用GetKerningPairs方法请记住,这个函数使用一个名为KERNINGPAIR的结构体,我们需要确保它在我们的类中定义,否则我们会得到编译错误!

    class API
    {
        [DllImport("gdi32.dll")]
        static extern uint GetKerningPairs(IntPtr hdc, uint nNumPairs,
        [Out] KERNINGPAIR[] lpkrnpair);
        [StructLayout(LayoutKind.Sequential)]
        struct KERNINGPAIR
        {
            public ushort wFirst; // might be better off defined as char
            public ushort wSecond; // might be better off defined as char
            public int iKernAmount;
            public KERNINGPAIR(ushort wFirst, ushort wSecond, int iKernAmount)
            {
                this.wFirst = wFirst;
                this.wSecond = wSecond;
                this.iKernAmount = iKernAmount;
            }
            public override string ToString()
            {
                return (String.Format("{{First={0}, Second={1}, Amount={2}}}", wFirst, wSecond, iKernAmount));
            }
        }
    }
    

现在你可以通过API

调用这个方法

我觉得你运气不好。

根据这个线程

字距对似乎没有相关的类。字形将为字形索引和前进宽度生成合理的默认值。

也许可以尝试pinvoke,但正如该帖子下的注释所说

请注意:返回的数据似乎只适用于默认的unicode块。

可能有一种方法可以通过更改代码页来获得更多信息(严格地说是我的猜测)。

我能够得到所有字距数据的唯一方法是直接解析文件;至少可以说不容易。