0

我所做的是将图像放在图片框1 背景图像中,然后在图像顶部绘制封面图像。如果鼠标按下,则使用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时允许下一步并清除掩码来满足我的需要

4

1 回答 1

1

您可以创建一个“掩码”图像来找出用户未发现的百分比:

为此,请创建一个具有白色背景的图像,您还将在该图像上绘制这些线条,但使用黑色笔,然后从这个隐藏的图像中,您可以通过计算非白色像素的数量轻松找到未覆盖的百分比Bitmap.GetPixel函数。

使用Color.Equals比较颜色时要小心(取自 Remarks 部分): 要仅根据 ARGB 值比较颜色,您应该使用 ToArgb 方法。这是因为 Equals 和 Equality 成员不仅仅使用颜色的 ARGB 值来确定等效性。

于 2013-05-31T02:30:39.707 回答