用PolyBezier(hdc,POINT,COUNT)绘制很漂亮
但是用公式展开就不对。(PolyBezier函数会对数组点做怎样的处理?GDI提供的绘图函数是怎样进行绘图的?)
POINT TestPt[10];
POINTF MijiPt[4000];
TestPt[0].x=374; TestPt[0].y=98;
TestPt[1].x=370; TestPt[1].y=98;
TestPt[2].x=367; TestPt[2].y=99;
TestPt[3].x=364; TestPt[3].y=101;
TestPt[4].x=362; TestPt[4].y=103;
TestPt[5].x=360; TestPt[5].y=105;
TestPt[6].x=360; TestPt[6].y=109;
TestPt[7].x=360; TestPt[7].y=113;
TestPt[8].x=362; TestPt[8].y=116;
TestPt[9].x=366; TestPt[9].y=120;
int a=100;
for(int i=0;i<9;i++)
{
if(i%3==0)
for(int j=0;j<a;j++)
{
float u;
u=1.0*j/a;
MijiPt[(i/3+1)*a-1-j].y=
power( u , 3 ) * power( (1-u) , 0 ) * TestPt[i+0].y
+ 3 * power( u , 2 ) * power( (1-u) , 1 ) * TestPt[i+1].y
+ 3 * power( u , 1 ) * power( (1-u) , 2 ) * TestPt[i+2].y
+ power( u , 0 ) * power( (1-u) , 3 ) * TestPt[i+3].y;
MijiPt[(i/3+1)*a-1-j].x=
power( u , 3 ) * power( (1-u) , 0 ) * TestPt[i+0].x
+ 3 * power( u , 2 ) * power( (1-u) , 1 ) * TestPt[i+1].x
+ 3 * power( u , 1 ) * power( (1-u) , 2 ) * TestPt[i+2].x
+ power( u , 0 ) * power( (1-u) , 3 ) * TestPt[i+3].x;
}
}
power(float a, int n)
{
float b=1.0;
while(n)
{
b*=a;
n--;
}
return b;
}
查知网汉字打标直接处理TT_PRIM_LINE和TT_PRIM_QSPLINE。