现在要做一个类似大头贴的软件,拍完照片后,可以用鼠标来签名,功能实现了,但签字的效果一直不理想,原来用的Canvas
image.Canvas.MoveTo(prex, prey);
image.Canvas.LineTo(x, y);
写出来的字,很生硬,有棱角,不圆滑后来用的GdiPlus
graphics := TGPGraphics.Create(self.Canvas.Handle);
pen:= TGPPen.Create(MakeColor(255, color_r, color_g, color_b), nowPenWidth);
graphics.SetSmoothingMode(999) ;
graphics.SetTextContrast(0);
graphics.DrawLine(pen, prex, prey, x, y );
效果也不理想我看有的类似可以签字的软件都可以实现写出毛笔字的效果了,不知道怎么做的,请教高人,怎么能实现

解决方案 »

  1.   

    用GdiPlus,并设置一个毛笔字字体,网上能下载到类似的字体。
      

  2.   

    潦草的字,可以下载一些奇异字体,就用canvas向上面写字,画上去打印出来就可以了。
      

  3.   

    大家误解我的意思了,可能也没细看我的问题,我是说用鼠标在image上写字,就把鼠标当成笔用,写出来字,写字我能实现,就是效果不好,有锯齿,不圆滑,想问问的是有没有人做过类似的,写出的字的效果好点的
      

  4.   

    如果有Bitmap的话要把Transparent去掉,不然会闪烁   
        Image1.Transparent=true; 
        Image1.Canvas.Brush.Style=bsClear; 
        Image1.Canvas.Font.Size=9; 
        Image1.Canvas.Font.Name='宋体'; 
        Image1.Canvas.TextOut(10,10,'透明汉字'); 
      

  5.   

    用贝赛尔线啊
    设一个全局动态点数组var
    pt:array of tpoint;鼠标按下时清除之前的点并记下当前点,将下下代码加入imagemousemove中setlength(pt,1);
    pt[0]:=point(x,y);鼠标在左键按下移动过程中按大小采集并绘制 下列代码加入mousemove 中   if (shift=[ssleft]) and ((abs(x-pt[high(pt)].X)>50)or(abs(y-pt[high(pt)].y)>50))then   
       begin
           setlength(pt,length(pt)+1);
           pt[high(pt)]:=point(x,y);
           canvas.PolyBezier(pt);
       end;
    //这里设了采集精度为50,太小了没效果,太多了偏差太大,用曲线来绘制,则不会太突兀鼠标弹起时,完成画线,并清除点数组,下列代码加入MOUSEUP中   if (shift=[ssleft]) then
       begin
           setlength(pt,length(pt)+1);
           pt[high(pt)]:=point(x,y);
           canvas.PolyBezier(pt);
           setlength(pt,0);
       end;大致可以满足楼主想法