这个线程几乎是我所需要的: 创建从一个半透明的位图的GraphicsPath
但他周围绘制图像的轮廓 - 我需要绘制一个只是一对夫妇内的图像像素。 基本上我想要画一个“焦点矩形”(除非它不是一个矩形)的结果需要在一个GraphicsPath中的形式,这样我就可以适应它送到我当前的代码。
私有函数GetImagePath(IMG的图像)作为GraphicsPath的......最终功能
[编辑]好吧,首先,我不能甚至可以从其他岗位代码工作。 我不断收到索引超出范围,在这一行:
*字节的α= originalBytes [Y * bitmapData.Stride + 4 * X + 3]; *
这是如果它甚至获得过其他的东西第一。 很多次,它出来的第一圈具有未发现非透明点 - 当大多数图像是不透明的。
该newst问题是,它会创建一个不进行任何检测点的列表。 图像68x68我点的列表中有像290x21点,甚至疯狂的像2316x-15
这是我原来的图像:
[不会让我上载的原因即时通讯新]
它的一个按钮的背景图像是70x70 - 如果该事项在所有。
我想使用的链接提供的常规,从它那里得到的输出,并添加围绕它自己的包装修改的路径在您需要的像素夫妇推。 你甚至可以使像素的量的输入参数移动,使得你可以用它玩。
否则,你可以直接添加第二次到所提供的程序。 无论哪种方式,我认为这是一个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
我执行几何图像: