C# 使用纹理笔刷删除封面图像并告知何时大部分已消失的刮擦效果

C# 使用纹理笔刷删除封面图像并告知何时大部分已消失的刮擦效果,c#,C#,我所做的是在picturebox1背景图像中放置一个图像,然后在图像顶部绘制一个封面图像。使用picturebox1鼠标移动如果鼠标向下,它会擦除部分封面,以显示底部图像,基本上就像刮擦票一样。我不知道如何判断大部分封面图像是否被删除。这就是我目前所拥有的 bmp1 = new Bitmap(coverimage); tb = new TextureBrush(pictureBox1.BackgroundImage); private void pictureBox1_Pai

我所做的是在picturebox1背景图像中放置一个图像,然后在图像顶部绘制一个封面图像。使用picturebox1鼠标移动如果鼠标向下,它会擦除部分封面,以显示底部图像,基本上就像刮擦票一样。我不知道如何判断大部分封面图像是否被删除。这就是我目前所拥有的

    bmp1 = new Bitmap(coverimage);
    tb = new TextureBrush(pictureBox1.BackgroundImage);


private void pictureBox1_Paint(object sender, PaintEventArgs e)
{

    base.OnPaint(e);

    e.Graphics.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
    e.Graphics.InterpolationMode = InterpolationMode.HighQualityBilinear;

    e.Graphics.DrawImage(bmp1, 0, 0, 400, 325);
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
        if (!_LastPoint.IsEmpty)
        {
            using (Graphics g = Graphics.FromImage(bmp1))
            using (Pen p = new Pen(tb, 50))
            {

                p.StartCap = LineCap.Round;
                p.EndCap = LineCap.Round;
                g.DrawLine(p, _LastPoint, e.Location);

                if (!g.Equals (bmp1))
                {
                    MessageBox.Show("done");
                }
            }
        }

        _LastPoint = e.Location;
       pictureBox1.Refresh();
    }
}
这个!g、 Equals(bmp1)会在图像发生更改时通知我,但我无法找到方法使其仅在图像发生剧烈更改时通知我。还有什么可以评判的吗

更新:::

 static int flags = 0;
 public static void ImageCompareString(Bitmap firstImage, Bitmap secondImage)
 {
   MemoryStream ms = new MemoryStream();
          firstImage.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
          String firstBitmap = Convert.ToBase64String(ms.ToArray());
          ms.Position = 0;
          secondImage.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
          String secondBitmap = Convert.ToBase64String(ms.ToArray());

   if (firstBitmap.Equals(secondBitmap))
              {
                  flags = flags + 1;
              }
             else
              {

              }

我是如何通过计算标志来实现上述功能的,当它们>=50时,允许下一步并清除掩码

您可以创建一个“掩码”图像,以找出用户未覆盖的百分比:

要做到这一点,创建一个白色背景的图像,在该图像上你也可以用黑色笔画出这些线,然后从这个隐藏的图像中,你可以通过使用函数计算非白色像素的数量,轻松找到未覆盖的百分比

比较颜色时要小心(摘自备注部分):
要仅根据颜色的ARGB值比较颜色,应使用ToArgb方法。这是因为Equals和Equality成员不仅仅使用颜色的ARGB值来确定等价性。

除非不要使用
GetPixel
,因为它非常慢。我喜欢你答案背后的想法,它可能对任何计划为发布的应用程序这样做的人都更有效,但我这样做是为了好玩,我不想在应用程序中添加另一个掩码,而且我得到了我的问题的修订版本,以满足我的需要。不过,我会选择你的答案,以防有人路过这里寻找类似的东西,这样他们就可以走你描述的路线,因为我相信它更稳定。非常感谢。