我一直在寻找解决方案已经有一段时间了,还没有找到它。我的应用程序的一个功能是加载图像然后改变它的形状 - 例如我加载一个普通的矩形图像,然后有2-3个按钮 - 将图像更改为圆形,三角形或其他形状。是这样甚至可能与Bitmaps?我发现诺基亚成像SDK有很多有趣的东西,但我找到的所有形状都是LensBlurEffect,这不是我需要的。
如果有人能指出我正确的方向,我将非常感激!
提前感谢您的帮助!
祝你好运, 罗马
答案 0 :(得分:1)
位图始终是矩形的,你无能为力。
您可以做的是使一些像素透明,从而使位图看起来具有不同的形状。
使用诺基亚成像SDK执行此操作的一种方法是使用BlendFilter在原始图像上混合透明图像(我建议只使用ColorImageSource)。您可以提供不同的蒙版来创建不同的“形状”。
答案 1 :(得分:1)
我正在研究使用诺基亚成像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;
}
}