如何在WinRT中使用WriteableBitmapEx从图像中的Point获取像素颜色?

时间:2014-08-31 19:11:57

标签: windows-runtime writeablebitmapex win-universal-app

我正在将我当前的(Silverlight)WP8.0应用程序移植到通用Windows应用程序中。在这个应用程序中,我有一个控件,允许用户使用自定义拨号控件。当刻度盘停止时,应用程序应该从该特定点(和底层图像)获得像素颜色。

在WP8.0中,我曾经做过以下事情:

WriteableBitmap wb = new WriteableBitmap(ColorWheelImage, null);
Color c = wb.GetPixel(pointX, pointY);

ColorWheelImage位于XAML中。

在WinRT中,WriteableBitmap仅支持new WriteableBitmap(int pixelWidth, int pixelWidth),而不像Silverlight那样设置图像。

我该如何解决这个问题......我似乎无法弄明白:(!

谢谢, 尼尔斯

1 个答案:

答案 0 :(得分:3)

在WinRT中,WriteableBitmap无法绘制视觉效果。相反,MS添加了新控件RenderTargetBitmap

RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap(); 
await renderTargetBitmap.RenderAsync(ColorWheelImage, width, height);
IBuffer pixelBuffer = await renderTargetBitmap.GetPixelsAsync();

GetPixelsAsync()为您提供IBuffer,而不是int数组。要获得序数WriteableBitmap,您可以使用WriteableBitmapEx

var width = renderTargetBitmap.PixelWidth;
var height = renderTargetBitmap.PixelHeight;
var writeableBitmap = await new WriteableBitmap(1, 1).FromPixelBuffer(pixelBuffer, width, height);