有一张bmp或者jpg在Image上,想在一些位置标志一些数据,而且数据是动的,例如:在一个管子旁边标志他的实时流量. 
解决方法1:用label显示数值,问题是:如果设置stretch为true;那么如果窗体的大小改变时,也就是图象放大或者缩小了,label的位置相对bmp上的一个点位置改变了. 解决方法2:用Canvas.TextOut,因为Canvas.TextOut是随着Image放大和缩小的.但是在文字下面有底色,如果设setbkmode(Image1.Canvas.Handle,transparent);这样没有了底色,这样的话,应该是一直在一个点上输出文字,而成了文字叠加,最后形成一个黑条. 第一和第二种方法如何解决?

解决方案 »

  1.   

    第一个:要计算放大缩小的相对位置。
    第二个:你是不是设置了Stretch为真,如果是的话,就要设置为False;其实还有另外一种方法:就是修改TImage控件(TImage有两个Canvas,一个是窗体区域的Canvas,你用这个TextOut的话,不会修改图片的内容,而且可以在任何图片上TextOut,不过这个Canvas被TImage用Bmp的Canvas覆盖了,你要修改Bmp的Canvas为另外一个名字,这样就可以用窗体的Canvas了)。
      

  2.   

    1. Label的位置是可以动态改变的
    2. 可以刷新一下原图,再写字 (可后台处理避免闪烁)
      

  3.   

    如果用textout输出动态信息,而且还要设置他的位置很麻烦.决定用label代替!! 
    image 在stretch为true的情况下,如何保证label相对image上的一个点的位置不变呢?
      

  4.   

    To:ahjoe   Label的位置是可以动态改变的   如何计算它新的位置呢?
      

  5.   

    第二种解决办法: 在每次你往图片上写入文字之前,重新导入一下Image就行了
      

  6.   

    用异或方式Canvas.TextOut;
    第一次:输入
    第二次:原来输入的内容就没有了,可以更换其它内容
      

  7.   

    我的图形是固定的,现在关键是如何得到放大缩小的比例.前提是我把stretch设置为true.
      

  8.   

    放大缩小的比例,拿图形的原大小跟Image的大小对比一下不就行了