如何改变Graphics的坐标系原点

tsyz2007 2007-02-12 01:22:08
Graphics默认的坐标系原点在左上角,请问如何设置可以让原点在右上角?
...全文
1566 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
tsyz2007 2007-02-14
  • 打赏
  • 举报
回复
那个pictureBox1.Width - 1024 应该为pictureBox1.Width - image.Width
tsyz2007 2007-02-13
  • 打赏
  • 举报
回复
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了.好像很复杂,唯有慢慢研究了.
不知道这种想法合不合理呢.
王集鹄 2007-02-13
  • 打赏
  • 举报
回复
//这样可以吗?
private void pictureBox1_Resize(object sender, EventArgs e)
{
pictureBox1.Padding = new Padding(
pictureBox1.ClientSize.Width - pictureBox1.Image.Width, 0, 0, 0);
}
jxf654 2007-02-13
  • 打赏
  • 举报
回复
up
tsyz2007 2007-02-13
  • 打赏
  • 举报
回复
这个方法我知道,其实是我没有把问题表达清楚.在发生Paint事件时,里面的e.Graphics也总是以左上角为原点的,而每次Paint后都用平移和旋转来改到右上角,是画不到想要的图的,这可能是Paint里每次更新图形的方式所造成的.
而我希望实现的效果是,当改变Client(如PictureBox)的大少时,图形是跟随着右上角移动,而不是默认的左上角.
这样表达问题应该比较清晰了,希望指教.
王集鹄 2007-02-12
  • 打赏
  • 举报
回复
Graphics vGraphics = Graphics.FromHwnd(Handle);
vGraphics.TranslateTransform(ClientSize.Width, 0);
vGraphics.DrawLine(Pens.Black, new Point(-10, 10), new Point(-10, 100));

TranslateTransform()方法可以改变原点RotateTransform()方法可以旋转坐标系

jxf654 2007-02-12
  • 打赏
  • 举报
回复
up
tsyz2007 2007-02-12
  • 打赏
  • 举报
回复
难道真的没有办法吗,郁闷...
tsyz2007 2007-02-12
  • 打赏
  • 举报
回复
补充一下:是直接投置到右上角,而不是通过相对左上角的一个变换而实现.
不知道能不能这样.

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧