Измените растровое изображение на различные формы в приложении Windows Phone
Я давно искал решение и пока не нашел его. Одна из функций моего приложения - загрузить изображение, а затем изменить его форму - например, я загружаю обычное прямоугольное изображение, а затем есть 2-3 кнопки - изменить изображение на круг, треугольник или какую-либо другую форму. Возможно ли что-нибудь подобное с растровыми изображениями? Я нашел много интересного о Nokia Imaging SDK, но все, что я нашел, это LensBlurEffect, что не совсем то, что мне нужно.
Если бы кто-то мог указать мне правильное направление, я был бы очень благодарен!
Заранее благодарю за помощь!
С наилучшими пожеланиями, Роман
2 ответа
Я работаю над фильтрами, которые рисуют фигуры с помощью Nokia Imaging SDK. Чтобы решить вашу проблему, я создал пример проекта, который использует смешанный фильтр Nokia Imaging SDK и мои собственные фильтры формы.
На самом деле вы можете сделать то же самое с изображением фигуры, на которое ссылается Дэвид (фон черный, белый на переднем плане) вместо использования моих пользовательских фильтров (EllipseShapeFilter над примером кода).
Вот пример кода;
var ellipseImage = new WriteableBitmap(1024, 768);
Rect origin = new Rect(new Point(512, 384), new Size(512, 384));
uint white = 0xff000000 | (255 << 16) | (255 << 8) | 255;
var image = LoadFromResources(new Uri(@"/BlendImageSample;component/Assets/Sample.jpg", UriKind.Relative));
using (var ellipseSource = new BitmapImageSource(ellipseImage.AsBitmap()))
using (var ellipse = new EllipseShapeFilter(ellipseSource, white, origin))
{
ellipseImage = await new WriteableBitmapRenderer(ellipse, ellipseImage).RenderAsync();
}
ImageViewer.Source = ellipseImage;
using (var backgroundSource = new BitmapImageSource(ellipseImage.AsBitmap()))
using (var foregroundSource = new BitmapImageSource(image.AsBitmap()))
using (var filterEffect = new FilterEffect(backgroundSource))
{
using (BlendFilter blendFilter = new BlendFilter())
{
blendFilter.ForegroundSource = foregroundSource;
blendFilter.BlendFunction = BlendFunction.Darken;
filterEffect.Filters = new[] { blendFilter };
var OutputBitmap = new WriteableBitmap(image.PixelWidth, image.PixelHeight);
var result = await new WriteableBitmapRenderer(filterEffect, OutputBitmap).RenderAsync();
ImageViewer.Source = result;
}
}
Ну, растровое изображение всегда будет прямоугольным, с этим ничего не поделаешь.
Что вы можете сделать, это сделать некоторые пиксели прозрачными, таким образом, создавая растровое изображение другой формы.
Одним из способов сделать это с помощью Nokia Imaging SDK является использование BlendFilter для наложения прозрачного изображения (я предлагаю только ColorImageSource) на исходное изображение. Вы можете предоставить разные маски для создания разных "фигур".