我有一个PictureBox,我在其中显示图像(让我们称之为Image1)。当用户用鼠标悬停Image1时,需要显示第二个图像(Image2)。我只需要显示Image2的一部分(10X10像素大小的盒子),而不是鼠标移动时的整个图像。
两张图片都是BMP。
我该如何完成这项任务?我会考虑使用叠加层?
我在图片框中显示Image1然后我将Image2加载到内存中,现在我只需要在鼠标移动时在Image1上显示Image2的部分。
谢谢,
答案 0 :(得分:1)
以下是一个例子:
public Form1()
{
InitializeComponent();
pictureBox1.Image = Bitmap.FromFile(your1stImage);
bmp = (Bitmap)Bitmap.FromFile(your2ndImage);
pb2.Parent = pictureBox1;
pb2.Size = new Size(10,10);
/* this is for fun only: It restricts the overlay to a circle:
GraphicsPath gp = new GraphicsPath();
gp.AddEllipse(pb2.ClientRectangle);
pb2.Region = new Region(gp);
*/
}
Bitmap bmp;
PictureBox pb2 = new PictureBox();
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
Rectangle rDest= pb2.ClientRectangle;
Point tLocation = new Point(e.Location.X - rDest.Width - 5,
e.Location.Y - rDest.Height - 5);
Rectangle rSrc= new Rectangle(tLocation, pb2.ClientSize);
using (Graphics G = pb2.CreateGraphics() )
{
G.DrawImage(bmp, rDest, rSrc, GraphicsUnit.Pixel);
}
pb2.Location = tLocation;
}
它使用过度偏移到光标的左上角添加一点以便平滑移动..