Обрезка изображения в Silverlight 3 - PullRequest
1 голос
/ 17 сентября 2009

Я нашел решение, которое выглядит довольно элегантно , но я не понимаю его поведение. Если я применяю алгоритм обрезки перед добавлением моего изображения в коллекцию Canvas.Children, он не работает. Зачем? В идеале мне нужна функция типа Image Crop(Image source, int X, int Y, int width, int heigh), которая возвращает новый обрезанный экземпляр Image и не требует помещения исходных / обрезанных изображений в Canvas. Возможно ли это?

Ответы [ 2 ]

4 голосов
/ 17 сентября 2009

Я предполагаю, что проблема, с которой вы сталкиваетесь, заключается в том, что когда вы вызываете Render на WriteableBitmap, источник изображения еще не загружен, поэтому Image ничего не отображает в WriteableBitmap.

Чтобы обойти это, вам нужно будет дождаться загрузки источника изображения; вы можете обработать событие Image.ImageOpened, чтобы получать уведомления, когда это происходит.

0 голосов
/ 20 марта 2014

Вы можете использовать WriteableBitmapEx, доступный как пакет NuGet.

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;
}
...