0

我有一个图像,我想GraphicsPath根据构成图像的像素的某种阈值在图像上创建一个表示选择。例如,一种颜色范围算法考虑了颜色值接近给定颜色的像素。

我目前的问题不是选择像素的算法,而是GraphicsPath我当前的代码变得过于复杂(点太多),因此创建它特别是进一步管理它的时间成本很高。

目前我只是简单地使用下面的代码(在这个例子中我只是取不透明的像素),我Rectangle为每个取的像素添加一个。

BitmapData bitmapData = sourceBitmap.LockBits(new Rectangle(0, 0, sourceBitmap.Width, sourceBitmap.Height), ImageLockMode.ReadOnly, sourceBitmap.PixelFormat);

GraphicsPath gp = new GraphicsPath();

unsafe
{
    byte* imagePointer = (byte*)bitmapData.Scan0;
    for (int x = 0; x < bitmapData.Width; x++)
    {
         for (int y = 0; y < bitmapData.Height; y++)
         {
              if (imagePointer[3] != 0)
                  gp.AddRectangle(new Rectangle(x, y, 1, 1));
              imagePointer += 4;
          }
     }
 }

如何简化此过程或结果GraphicsPath以获得更简单的路径,理想情况下只有轮廓?

编辑 然后我将使用路径:在屏幕上显示其轮廓(运行蚂蚁);将其用作其他图像的遮罩(取消路径中的内容);做命中测试(一个点是否在路径内)。举个例子: 在此处输入图像描述

4

0 回答 0