我找到了solution that looks quite elegant,但我不明白它的行为。如果我在将我的图像添加到Canvas.Children集合之前应用裁剪算法它不起作用。为什么?理想情况下,我需要像Image Crop(Image source, int X, int Y, int width, int heigh)
这样的函数,它返回一个新的裁剪图像实例,并且不需要将源/裁剪图像放置到Canvas。有可能吗?
答案 0 :(得分:4)
我猜你遇到的问题是当你在WriteableBitmap上调用Render时,图像源还没有下载,所以Image不会在WriteableBitmap中呈现任何内容。
要解决此问题,您需要等待图像源下载;您可以处理Image.ImageOpened事件,以便在发生这种情况时收到通知。
答案 1 :(得分:0)
您可以使用可用作NuGet包的WriteableBitmapEx。
void Crop(Image source, string imageRelativePath, int x, int y, int width, int heigh)
{
WriteableBitmap wb = BitmapFactory.New(1, 1)
.FromResource(imageRelativePath)
.Crop(x, y, width, heigh);
wb.Invalidate();
source.Source = wb;
}