C# PictureBox加载带有偏移的图像

4
我有一个资源文件(.png格式),其中包含几个图像。它们以一定的大小和间距排列,因此基于它们的偏移量调用它们应该相对容易。
我可以很好地调整图片框以适合一个图像; 但是,我不知道如何基于其偏移量加载图像,因此我总是只获取左上角的一个图像。
我真的很愿意使用任何方法,但在搜索中并没有找到有用的东西 - 因为我确实不知道要搜索什么。
4个回答

9

您可以把 PictureBox 放在一个 Panel 中,将该面板作为您的视口。确保该面板的 AutoScroll 属性设置为 false,以避免出现滚动条。然后,加载图像到 PictureBox 中,并将其位置相对于 Panel 设置,以便只有您想要显示的区域可见。

pictureBox1.SizeMode = PictureBoxSizeMode.AutoSize;
pictureBox1.Image = Image.FromFile(@"C:\MyPicture.png");
pictureBox1.Location = new Point(-100, -100);

我的第一个想法是存储原始图像并创建副本,但这种方法更好,谢谢。 - Jürgen Steinblock

7
假设你的PNG图像宽度为imgwidth像素,由n个水平图像组成,你可以尝试以下方法:
Image imgsrc = Image.FromFile("...."); // your PNG file
Image imgdst = new Bitmap(imgwidth/n, imgsrc.Height);
using (Graphics gr = Graphics.FromImage(imgdst))
{
    gr.DrawImage(imgsrc,
        new RectangleF(0, 0, imgdst.Width, imgdst.Height),
        new RectangleF(imgindex * imgwidth/n, 0, imgwidth/n, imgsrc.Height),
        GraphicsUnit.Pixel);
}

这个想法是创建一个新的图像(imgdst),并在它上面绘制你所需要的原始图像的部分。
使用新的图像,你可以随心所欲地进行操作,甚至可以将其绘制在图片框中。


0

听起来你想做类似于精灵的东西;你只加载一张图片,然后移动“视口”以显示不同的图片。

如果是这样的话,你将无法使用原始的PictureBox类来实现。你可以控制大小,但不能控制位置。我认为你需要通过代码加载图像,并基于该图像的必要部分创建新的图像(使用GDI+)。


0

如果您只想为用户显示一张图片,可以将该图片添加到标签中,然后按照您的喜好设置图像的对齐属性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接