2

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

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

您如何从 .NET 使用像这样的 Windows 库函数?

4

2 回答 2

3

你可以找到这个方法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现在您可以通过类调用此方法

于 2013-05-22T19:22:32.447 回答
2

我觉得你运气不好。

根据这个线程

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

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

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

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

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

于 2013-05-22T19:18:44.507 回答