我一直在研究Nokia Imaging SDK上的CustomEffectBase
课程,我已经在他们的RealtimeFilterDemo示例中添加了这些课程,但是我想在他们的Filter Explorer Demo中添加一个效果。好。我不知道该怎么做。我使用CustomEffectBase
InvertCustomEffect.cs
public class InvertCustomEffect : CustomEffectBase
{
public InvertCustomEffect(IImageProvider source) : base(source)
{
}
protected override void OnProcess(PixelRegion sourcePixelRegion, PixelRegion targetPixelRegion)
{
var sourcePixels = sourcePixelRegion.ImagePixels;
var targetPixels = targetPixelRegion.ImagePixels;
sourcePixelRegion.ForEachRow((index, width, position) =>
{
for (int x = 0; x < width; ++x, ++index)
{
uint pixel = sourcePixels[index];
uint blue = pixel & 0x000000ff; // blue color component
uint green = (pixel & 0x0000ff00) >> 8; // green color component
uint red = (pixel & 0x00ff0000) >> 16; // red color component
uint average = (uint)(0.0722 * blue + 0.7152 * green + 0.2126 * red); // weighted average component
uint grayscale = 0xff000000 | average | (average << 8) | (average << 16); // use average for each color component
targetPixels[index] = ~grayscale; // use inverse grayscale
}
});
}
}
这是一种基本的灰度反转效果。在Filter Explorer项目中,有一个名为FilterModel.cs的Model,其中输入要执行的效果。问题是,SDK附带的标准效果有诸如整数和双精度之类的参数,这些参数只是调整效果的参数,但我创建的扩展CustomEffectBase的类需要IImageProvider source
作为参数。这就是我被困住的地方,我不知道如何在Filter Explorer项目中实现这个并从这里开始进展?
FilterModel.cs
public class InvertGrayscaleFilterModel : FilterModel
{
public InvertGrayscaleFilterModel()
{
Name = "Invert Grayscale";
}
[XmlIgnore]
public override Queue<IFilter> Components
{
get
{
Queue<IFilter> components = new Queue<IFilter>();
components.Enqueue(new FilterAppTest.Filters.InvertCustomEffect()); //error requiring IImageProvider source
return components;
}
}
}
答案 0 :(得分:1)
你在这里处理两件不同的事情。您尝试在FilterModel.cs中添加的组件Queue正在存储IFilters集合,换句话说,可以通过添加对FilterEffect队列的引用来应用于图像的不同过滤器。
自定义效果(在您的情况下为InvertGrayscaleFilterModel)不是Filter,它是(自定义)效果。这意味着它与FilterEffect位于链中的同一级别。这意味着您将无法将其与其他过滤器结合使用,您需要将其作为顶部链中的新元素添加到渲染器之前的某个位置。
您可能需要稍微重新安排示例的体系结构才能使其正常工作。
我强烈建议您查看Nokia Imaging SDK's Core Concepts document。 “基本构建块”一章包含了您需要设置的链的详细说明。它还有一章专门讨论自定义效果。