Graphics默认的坐标系原点在左上角,请问如何设置可以让原点在右上角?

解决方案 »

  1.   

    Graphics vGraphics = Graphics.FromHwnd(Handle);
    vGraphics.TranslateTransform(ClientSize.Width, 0);
    vGraphics.DrawLine(Pens.Black, new Point(-10, 10), new Point(-10, 100));TranslateTransform()方法可以改变原点RotateTransform()方法可以旋转坐标系
      

  2.   

    这个方法我知道,其实是我没有把问题表达清楚.在发生Paint事件时,里面的e.Graphics也总是以左上角为原点的,而每次Paint后都用平移和旋转来改到右上角,是画不到想要的图的,这可能是Paint里每次更新图形的方式所造成的.
    而我希望实现的效果是,当改变Client(如PictureBox)的大少时,图形是跟随着右上角移动,而不是默认的左上角.
    这样表达问题应该比较清晰了,希望指教.
      

  3.   

    //这样可以吗?
    private void pictureBox1_Resize(object sender, EventArgs e)
    {
        pictureBox1.Padding = new Padding(
            pictureBox1.ClientSize.Width - pictureBox1.Image.Width, 0, 0, 0);
    }
      

  4.   

    private void pictureBox1_ClientSizeChanged(object sender ,EventArgs e)
    {
    Graphics g = pictureBox1.CreateGraphics();
    g.TranslateTransform(pictureBox1.Width - 1024 ,0);
                               //image为一个Bitmap实例
    g.DrawImage(image ,0 ,0);
    }
    这样可以让图像跟着右上角走,但是由于在改变pictrueBox1大小时开销比较大,造成图像不稳定,不过这也在意料之中,Piant事件中响应所得的图像是只更新了新出来的部分所以会比较稳定,但是它Graphics的默认坐标原点始终在左上角,所以拉宽时图像就是从右边出来,不会从左边出来,要实现很稳定的图像从右边出来,估计要重写PictrueBox里的一些东西和Graphics了.好像很复杂,唯有慢慢研究了.
    不知道这种想法合不合理呢.
      

  5.   

    那个pictureBox1.Width - 1024 应该为pictureBox1.Width - image.Width