“图像”控件中有图像。当用户点击图像控件时,应该提取该精确像素的颜色。
这是msdn为 Windows Phone 8 提供的代码。 In Chroma Key Demo For Windows 8
private async void ViewfinderCanvas_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
var point = e.GetPosition(ViewfinderCanvas);
var bitmap = new WriteableBitmap((int)ViewfinderCanvas.ActualWidth, (int)ViewfinderCanvas.ActualHeight);
using (var source = new CameraPreviewImageSource(App.Camera))
using (var effect = new FilterEffect(source))
using (var renderer = new WriteableBitmapRenderer(effect, bitmap, OutputOption.Stretch))
{
effect.Filters = new List<IFilter>()
{
new RotationFilter(_rotationFilter.RotationAngle)
};
await renderer.RenderAsync();
var picked = bitmap.Pixels[((int)point.Y) * bitmap.PixelWidth + ((int)point.X)];
_color = new Color
{
A = 0xFF,
R = (byte)((picked & 0x00FF0000) >> 16),
G = (byte)((picked & 0x0000FF00) >> 8),
B = (byte)(picked & 0x000000FF)
};
}
ColorBorder.Background = new SolidColorBrush(_color);
}
我编辑的代码,
private void FilteredView_Tapped(object sender, TappedRoutedEventArgs e)
{
var Point = e.GetPosition(FilteredView);
var bitmap = new WriteableBitmap((int)FilteredView.ActualWidth, (int)FilteredView.ActualHeight);
// ERROR HERE
var picked = bitmap.Pixels[((int)Point.Y) * bitmap.PixelWidth + ((int)Point.X)];
_color = new Color
{
A = 0xFF,
R = (byte)((picked & 0x00FF0000) >> 16),
G = (byte)((picked & 0x0000FF00) >> 8),
B = (byte)(picked & 0x000000FF)
};
}
FilteredView是图像控制。我只需要指针的颜色,所以我不使用过滤器等,因为它在这里没有任何用处。功能也不需要是异步的。
错误说,'Windows.UI.Xaml.Media.Imaging.WriteableBitmap'不包含'Pixels'的定义。
项目模板是Windows Phone 8.1项目。
导入Lumia Imaging SDK(如果任何Bitmap类型存在冲突,则会提及)。
问题:这是否是正确的方法?如果是,那么使用WriteableBitmap类访问像素有什么可能的替代方法呢?