我有一张图片,我想创建一个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
以获得更简单的路径,理想情况下仅使用轮廓?
修改 然后我将使用路径:在屏幕上显示其轮廓(运行蚂蚁);用它作为其他图像的掩码(取消路径中的内容);做命中测试(点是否在路径内)。举个例子: