根据Windows手机中的颜色裁剪图像边框

时间:2013-06-06 12:05:20

标签: c# image windows-phone-7 windows-phone-8 writablebitmap

enter image description here

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

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

1 个答案:

答案 0 :(得分: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. 边框始终只有一种颜色
  3. 假设这是真的,你可以想到一个简单的算法(每次都可能不正确,但你可以测试并调整),这需要几个随机点,例如

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

    只要相邻像素与起始像素的颜色相同,

    然后向图像的内部移动。随机取得的分数越多,你获得正确分数的可能性就越大。这个问题的一个明显问题是,图片上的某些东西可能与边框颜色相同(完全相同),这使得边框看起来比实际宽。这就是为什么你应该多加点。

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