绘制边境仅内部图像的非透明部分(Draw border just inside non-transp

2019-07-29 15:43发布

这个线程几乎是我所需要的: 创建从一个半透明的位图的GraphicsPath

但他周围绘制图像的轮廓 - 我需要绘制一个只是一对夫妇内的图像像素。 基本上我想要画一个“焦点矩形”(除非它不是一个矩形)的结果需要在一个GraphicsPath中的形式,这样我就可以适应它送到我当前的代码。

私有函数GetImagePath(IMG的图像)作为GraphicsPath的......最终功能

[编辑]好吧,首先,我不能甚至可以从其他岗位代码工作。 我不断收到索引超出范围,在这一行:

*字节的α= originalBytes [Y * bitmapData.Stride + 4 * X + 3]; *

这是如果它甚至获得过其他的东西第一。 很多次,它出来的第一圈具有未发现非透明点 - 当大多数图像是不透明的。

该newst问题是,它会创建一个不进行任何检测点的列表。 图像68x68我点的列表中有像290x21点,甚至疯狂的像2316x-15

这是我原来的图像:

[不会让我上载的原因即时通讯新]

它的一个按钮的背景图像是70x70 - 如果该事项在所有。

Answer 1:

我想使用的链接提供的常规,从它那里得到的输出,并添加围绕它自己的包装修改的路径在您需要的像素夫妇推。 你甚至可以使像素的量的输入参数移动,使得你可以用它玩。

否则,你可以直接添加第二次到所提供的程序。 无论哪种方式,我认为这是一个2个回合方法。 你需要找到对象的外部边界,也就是提供什么。 然后,你需要基本路径周围移动自己,了解道路的导数,这样就可以在你正在寻找在当前点垂直移动到衍生的路径。 您还必须从外部内部识别(即哪个方向移动线)。

算法可能会是这个样子(还记得刚算法):

Create New List of Points for the new line

For all points i in 0 to (n-2) (points in original point list)
    // Get a New point in between
    float xNew = (x(i) + x(i + 1) ) / 2
    float yNew = (y(i) + y(i + 1) ) / 2

    // Need to figure out how much to move in X and in Y for each (pixel) move along
    // the perpendicular slope line, remember a^2 + b^2 = c^2, we have a and b
    float a = y(i + 1) - y(i)
    float b = x(i + 1) - x(i)
    float c = sqrt( (a * a) + (b * b) )

    // c being the hypotenus is always larger than a and b.
    // Lets Unitize the a and b elements
    a = a / c
    b = b / c

    // Assume the original point array is given in clockwise fashion
    a = -a
    b = -b

    // Even though a was calculated for diff of y, and b was calculated for diff of x
    // the new x is calculated using a and new y with b as this is what gives us the
    // perpendicular slope versus the slope of the given line
    xNew = xNew + a * amountPixelsToMoveLine
    yNew = yNew + b * amountPixelsToMoveLine

    // Integerize the point
    int xListAdd = (int)xNew
    int yListAdd = (int)yNew

    // Add the new point to the list
    AddPointToNewPointList(xListAdd, yListAdd)

Delete the old point list

我执行几何图像:



文章来源: Draw border just inside non-transparent portion of image