GDI+ 图片移动问题

hotmail_mk 2008-07-25 03:52:54
我刚使用GDI+不久,现在在图片移动上遇到如下困惑,一整天了,没找到原因。采用的是pictureBox显示,首先将一幅背景图和一幅小图画到对象bmp中,然后显示在pictureBox1上。当鼠标拖动图片的的时候判断拖得是大图还是小图,拖大图就一起移动,拖小图就小图移动。现在载入图片后直接拖小图没有问题,但是拖完大图再拖小图坐标系统就出问题了。由于对GDI+刚开始学习,所以想不通错误的地方。高手们帮看看代码有什么问题?谢谢!以下是测试主要代码(只是为了测试功能):
public partial class Form1 : Form
{
private Bitmap bmp = null;
private Bitmap bmt = null;
private Bitmap bmk = null;
private Point lastPoint = new Point(); //点击位置
private Point offset = new Point();//最终位置
int i = 150, k = 0;
Rectangle r = new Rectangle(150, 0, 65,82);//直接将小图初始位置标出

private void Form1_Load(object sender, EventArgs e)
{
SetStyle(ControlStyles.DoubleBuffer, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.UserPaint, true);
bmp = new Bitmap(pictureBox1.Width,pictureBox1.Height);
}

private void btNew_Click(object sender, EventArgs e)
{
Graphics g1 = Graphics.FromImage(bmp);
Bitmap bmtest = new Bitmap(@"2.jpg");
bmk = new Bitmap(bmtest);
bmtest.SetResolution(128f, 128f);
g1.DrawImage(bmtest, 0, 0);
bmtest.Dispose();
bmtest = new Bitmap(@"1.jpg");
bmt = new Bitmap(bmtest);
g1.DrawImage(bmtest, 150, 0);
pictureBox1.Invalidate();
}

private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
lastPoint = e.Location;
}

private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
Graphics g1 = Graphics.FromImage(bmp);


PointTextBox.Text = e.Location.X.ToString() + "," + e.Location.Y.ToString() + "|" + r.X.ToString() + "," + r.Y.ToString();
if (e.Button == MouseButtons.Left)
{

Cursor.Current = Cursors.Hand;

if (r.Contains(lastPoint))
{

r.Offset((e.X - lastPoint.X), (e.Y - lastPoint.Y));
g1.DrawImage(bmt,r);
}
else
{
offset.X += e.X - lastPoint.X;
offset.Y += e.Y - lastPoint.Y;
r.Offset((e.X - lastPoint.X), (e.Y - lastPoint.Y));
}

lastPoint = e.Location;
pictureBox1.Invalidate();
}

}

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
if (bmp != null)
{

//e.Graphics.DrawImage(bmp, pictureBox1.ClientRectangle, -offset.X, -offset.Y, pictureBox1.ClientSize.Width, pictureBox1.ClientSize.Height, GraphicsUnit.Pixel);
e.Graphics.DrawImage(bmp, offset);
}
}

...全文
249 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hotmail_mk 2008-07-28
  • 打赏
  • 举报
回复
不是误差产生的,是移动背景图的坐标处理有问题。
hotmail_mk 2008-07-28
  • 打赏
  • 举报
回复
自己解决了。
jl_lsj 2008-07-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hotmail_mk 的回复:]
引用 1 楼 sjm2003 的回复:
判断坐标对象的问题

不理解,能具体一些吗?
[/Quote]
hotmail_mk 2008-07-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sjm2003 的回复:]
判断坐标对象的问题
[/Quote]
不理解,能具体一些吗?
hotmail_mk 2008-07-25
  • 打赏
  • 举报
回复
我自己的分析是由于再做计算的时候的误差累积造成,因为我发现移动后画图的位置和计算的结果差值不稳定。如果是这个原因该如何解决?
另外加一个问题,像我这样的移动图片的情况,c#结合GDI+可不可以像Photoshop里的一样把小图作为一个图层画在大图上面,有没有这样的例子?
sjm2003 2008-07-25
  • 打赏
  • 举报
回复
判断坐标对象的问题
notepad--v3.4 windows Notepad--v3.4.0-plugin-Installer.exe 是win10下面的插件版安装包,会关联右键菜单等。 Notepad--v3.4.0-win10-portable.zip 是绿色免安装版本,解压即用,不会关联右键菜单注册表。 Ndd-quick-v3.3.0-win10-single-portable.zip 是单文件绿色免安装版,只包含皮肤和vc依赖库,不含插件、不含文件对比,主推轻量级、快速反应。适合只需要纯粹、轻快级,文本编辑器的用户。不定期发布。 MacOS 版本 Notepad--v3.4.0-mac_x64_12.3.dmg 是macos 12.x 及以后的版本。 Notepad--v3.4.0-mac_arm64_12.3.dmg 是macos 12.x 及以后 arm64 m1/m2芯片 的版本。第一次安装时,需要在设置偏好里面,放开苹果的安装限制,才能正常识别,请自行放开设置一下。 如果还是有问题,参考帖子:#I8JTJN:macOS Sonoma 14.1.1安装提示已损坏:macOS Sonoma 14.1.1安装提示已损坏 uos com.hmja.notepad_3.4.0.0_amd64.deb 是x64 cpu架构的uos系统对应的ndd版本。 其余系统版本后续会发布。 3.4 修改如下: 1 支持文件标签拖入拖出到新窗口的效果。 2 windows下修改快捷键放开。 3 按行号切分大文件。 4 大文件打开时,在文件夹查找所在目录,macos下可能会崩溃问题。 5 目录右键增加删除文件、文件夹功能。 6 补充深色主题下rust语法高亮; lisp 语法失效问题。 7 linux下信号打开文件,不拿锁,打开文件在消息队列中去做。

111,092

社区成员

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

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

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