最近在写一个小控件,涉及到复杂的坐标变换,以及旋转之类的,现在三角函数都记不全了,作这个实在是痛苦.突然想到了.NET中的图片处理已经使用了GDI+了,里面的坐标变换之类的应该是GDI+的一些API.于是找来Reflector把System.Drawing这个DLL反编,查看源码,果真是从GDIplus.dll这个库里导出来的.GdipRotateWorldTransform 这个实现了坐标系的旋转,GdipTranslateWorldTransform这个实现了坐标系的平移...
不过在处理写文字串的时候GdipDrawString,碰到了麻烦:里面的字体什么的还要引用其它的API(GdipCreateFontFamilyFromName,GdipCreateFont)来生成.在使用GdipCreateFontFamilyFromName的时候,发现生成的FontFamily一直是空的,比较奇怪,最后发现.NET里面实现的时候,导入的字符集已经由以前常见的Ansi变成Unicode了,于是把字体名称的字符转成Unicode编码后搞定。得到一个提示,里面的所有字串的都是需要Unicode编码。
不过比较郁闷的事情是生成的图片一直是空白的,跟踪每一步API的使用返回的值都是OK。还得要一袋烟功夫来研究。