我想做一个获取字符位图数据的工具,想用C#调用windows API的GetGlyphOutline()方法,代码如下:
//定义字体
Font font = new Font("宋体", 16);
char c = 'a';
//初始化字符信息结构
GLYPHMETRICS metrics = new GLYPHMETRICS();
//设置变换矩阵
MAT2 matrix = new MAT2();
matrix.eM11.value = 1;
matrix.eM12.value = 0;
matrix.eM21.value = 0;
matrix.eM22.value = 1;
//获得环境句柄
IntPtr hdc = g.GetHdc();
//设置GGO_BitMap参数并第一次调用函数,获得字符需要的缓存大小
int bufferSize = (int)GetGlyphOutline(hdc, (uint)c, (uint)1, out metrics, 0, IntPtr.Zero, ref matrix);
//根据获得的缓存大小请求缓存
IntPtr buffer = Marshal.AllocHGlobal((int)bufferSize);
//第二次调用函数,获得字符缓存
int ret = GdiNativeMethods.GetGlyphOutline(hdc, (uint)c, (uint)1, out metrics, (uint)bufferSize, buffer, ref matrix);
我在测试过程中,发现编译器总是提示IntPtr buffer = Marshal.AllocHGlobal((int)bufferSize);需要足够的缓存大小,检查后发现如果把bufferSize值设置为uint,则该值非常大,所以导致该值设置为int值后变成了-1。我想是不是因为值太大,溢出了int的取值范围。将该值设置为uint后,编译器又提示uint值不能转换为system.intprt类型,请问怎么办?
欢迎光临 CSkin博客 (http://bbs.cskin.net/) | Powered by Discuz! X3.2 |