8

在此处输入图像描述

以上是我正在使用的图像。我想要实现的是从图像中删除边框的红色部分。如何在 Windows Phone 中以编程方式实现这一点?我找到了WriteableBitmapExtensions.Crop()方法,但我对参数感到困惑(我如何找到图像的 x、y 位置以及大小和宽度?)

我面临的另一个问题是:我将获得具有不同大小边框的图像,因此我无法对 x 或 y 值进行硬编码。
任何人都可以提出解决方案,或指导我解决问题吗?

4

1 回答 1

3

这不是一件小事,您还没有与我们共享任何代码,所以我可以给您一些建议。每个 WriteableBitmap 都定义了宽度和高度。您应该可以通过

wb.PixelWidth;
wb.PixelHeight;

其中 wb 是您的 WriteableBitmap (图片)

话虽如此,使用 WriteableBitmapEx 库裁剪 WriteableBitmap 是微不足道的

var croppedBmp = wb.Crop(10, 10, 300, 220);

如果你的 wb 是 320x240 并且边框的宽度是 10,那么上面的 Crop 调用就可以解决问题 - 你将从点 (10,10) 开始到 (310, 230) 结束的内部矩形

现在到您的第二个问题 - 不知道边框的宽度。如果你知道这会有所帮助

  1. 边框在图片的每一侧都是相同的厚度
  2. 边框总是只有一种颜色

假设这是真的,您可以考虑一个简单的算法(可能并非每次都正确,但您可以对其进行测试和调整),例如,它会采用一些随机点

(0,randNumber < wb.PixelHeight), (randNumber < wb.PixelWidth, 0), (wb.PixelWidth, randNumber < wb.PixelHeight), (randNumber < wb.PixelWidth, wb.PixelHeight)

然后只要相邻像素与起始像素颜色相同,就向图片的内部移动。你随机取的分数越多,你做对的机会就越大。这样做的一个明显问题是,图片上的某些东西可能与边框颜色相同(完全相同),这会使边框看起来比实际更宽。这就是为什么你应该得到更多的分数。

如果您展示了一些代码,我很乐意扩展答案。

于 2013-06-06T16:05:45.403 回答