pictureBox sizemode=zoom 后图片像素和鼠标位置不符

lzjdlsl 2011-11-15 01:12:20
如题将pictureBox sizemode=zoom 后图片进行了缩放鼠标在图片上画的区域和真实保存到图片数组中的区域不符。
因为我是想要将图片区域
将图片载入
picBox.Image = Image.FromFile(strPicPath);

Image.FromStream(new MemoryStream(BmpBuf))
如何做到图片像素真实位置和鼠标位置一致
我在网上搜到了一个同样的问题。但是没有解决。
http://zhidao.baidu.com/question/72609072.html
请各位帮忙
...全文
1246 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzjdlsl 2011-11-16
  • 打赏
  • 举报
回复
clipBounds为鼠标画的区域,等比例缩放。这个是怎么得来的啊?
lzjdlsl 2011-11-16
  • 打赏
  • 举报
回复
我的图片长度和图片不一致的。那个留出的空白部分。不管。这个问题该怎么解决呢。我是一点要保存到int数组中的。谢谢再帮忙看看。
qldsrx 2011-11-15
  • 打赏
  • 举报
回复
我测试过zoom的模式,如果长宽比与picturebox设置的长宽比不一致,由于不能变形,因此会让其中一项(长或宽)与picturebox一致,另一项小于picturebox的对应属性,也就是按比例放大或缩小。
除非你的picturebox长宽比和图片一致,否则就会留出空白部分。
lzjdlsl 2011-11-15
  • 打赏
  • 举报
回复
只需要在图片的模式设置为zoom后他就会去自动在整个picturebox中显示出来。怎么会有超出图片范围的部分呢?
qldsrx 2011-11-15
  • 打赏
  • 举报
回复
有个问题要确认下,你在PictureBox上画图时,需要考虑图片本身的区域范围吗?因为ZOOM可能会造成左右两边或者上下两边有空白,这部分超出图片范围的部分要考虑进去吗?
lzjdlsl 2011-11-15
  • 打赏
  • 举报
回复
谢谢楼上的。不是图片缩放问题。是我在自动缩放的图片上面画图。然后把这个区域的图片存入byte[];
然后其他的页面把这个byte[]取出来
绘图的时候先设置两个图片大小的数组。
public static int[] Proc_y = new int[1600];
public static int[] Proc_x = new int[1600];
经过处理将这个图片大小的每个像素点都赋值。
FillLineValue(Last_y, Last_x, e.Y, e.X, ref Proc_y, ref Proc_x);
Point pCurrent = new Point(Proc_x[i] + 1, Proc_y[i] + 1); Point pLsat = new Point(Proc_x[i], Proc_y[i]);
this.g.DrawLine(pen, pLsat, pCurrent);
Proc_x[i], Proc_y[i]
这个时候就和鼠标中的不对了。
qldsrx 2011-11-15
  • 打赏
  • 举报
回复
最好给出你的部分绘图代码参考。我现在不知道你是绘图出现问题,还是保存图片出现问题。
2楼比例计算有误,不一定是按照Width,也可能按照Height,需要计算哪个值更小。
ruanwei1987 2011-11-15
  • 打赏
  • 举报
回复
无论什么模式,鼠标的位置是根据和pictureBox 的相对位置计算的,

而不同模式下你的图片和picturebox的位置不同,

按楼上方法试试呢?
  • 打赏
  • 举报
回复
float zoom = (float)Image.Width/this.pictureBox.Width;
  • 打赏
  • 举报
回复

pictureBox.AutoSize = true;
//图片载入后
float zoom = (float)this.pictureBox.Width / Image.Width;
//clipBounds为鼠标画的区域,等比例缩放
g.DrawImage(原图,
新图,
clipBounds.Left * zoom
clipBounds.Top * zoom
clipBounds.Width * zoom
clipBounds.Height * zoom
GraphicsUnit.Pixel);
  • 打赏
  • 举报
回复
不知道理解得对不对

你可以算出缩放比例,存的时候再用这个比例放大就是了
float zoom = (float)this.pictureBox.Width / Image.Width;
clipBounds为鼠标画的区域,等比例缩放
var left = clipBounds.Left * zoom
clipBounds.Top * zoom
clipBounds.Width * zoom
clipBounds.Height * zoom
ruanwei1987 2011-11-15
  • 打赏
  • 举报
回复
同样的问题,他比你描述的要清楚,我测试下看

110,538

社区成员

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

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

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