显示另一个图像后面的图像部分

时间:2015-02-13 14:03:42

标签: c# overlay picturebox bmp

我有一个PictureBox,我在其中显示图像(让我们称之为Image1)。当用户用鼠标悬停Image1时,需要显示第二个图像(Image2)。我只需要显示Image2的一部分(10X10像素大小的盒子),而不是鼠标移动时的整个图像。

两张图片都是BMP。

我该如何完成这项任务?我会考虑使用叠加层?

我在图片框中显示Image1然后我将Image2加载到内存中,现在我只需要在鼠标移动时在Image1上显示Image2的部分。

谢谢,

1 个答案:

答案 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;
}

它使用过度偏移到光标的左上角添加一点以便平滑移动..