请问,在Rect(0,0,2000,2000)内的图元如何在Rect(200,200,500,500)的区间内显示谢谢

解决方案 »

  1.   

    CopyRect() 函數,具體參數請查看說明!
      

  2.   

    Canvas.CopyRect(DestRect, bmp.Canvas, SourceRect);
      

  3.   

    这方式不行,一个画文件 原大小是 Rect(0,0,2000,2000) 保存为一个文件后,再打开,这时显示的大小是Rect(200,200,500,500), 你说怎么用CopyRect方法你可能想说先成生一个 Rect(0,0,2000,2000) 再用CopyRect生成,这个方法我试了不行,生成的内容是界面(不是目标内容)
      

  4.   

    你在Rect(0,0,2000,2000)中作图时,就要把数据保存起来,
    保存在什么地方(内存或外存)都可以,但不是屏幕,
    只要这样,就可以做到你的要求了.
      

  5.   

    我还是不明白你的意思>我的要求在原来的 Rect(0,0,2000,2000) 的画,怎么才能全部在 Rect(200,200,500,500) 内画出来我用了方法
      将 sx := 2000/(500-200);  sy :=  2000/(500-200) 再将每个图元 x := x * sx ; y := y * sy  
      但这方式不行. 
      

  6.   

    查看COpyRect() 的源码,事实就是用 StretchBlt API 的方法
      

  7.   

    你需要把Rect(0,0,2000,2000)内的图元放在Rect(200,200,500,500)的区间内显示,这是将图形缩小,而你用
     
    sx := 2000/(500-200);  sy :=  2000/(500-200)是把图形放大,当然不行!想一想看,怎么把图形缩小?
      

  8.   

    是你是要跟我说,将图放小是:
     sx := 1/(2000/(500-200)); sy := 1/(2000/(500-200))
      

  9.   

    问题如是出在这个哪个除哪个,我肯定能跟踪出来to:
      sailxia(小帆
      
      文件内已保存了 wscreen = 2000 hscreen = 2000 两个信息
      

  10.   

    我在另一帖中已经给出了最终答案. 也就是说:将你原来的计算公式改成  sx = 200 + x*(500-200)/2000
      sy = 200 + y*(500-200)/2000就行了.这里,不仅仅是放大缩小,还要把原点进行位移,使  P(x,y)=(0,0)变换到P'(x',y')=(200,200)