在此处查看我的解决方案,将图像转换为灰度。
Convert A Dynamic Bitmap To Gray Scale.
注意循环,我从像素阵列中解码每个红、绿、蓝像素,并用Buffer.BlockCopy 重新组合图片。所以基本上你可以用这些组件做任何你想做的事情来修改你的图片然后块复制回来。
private void PutPixel(int x, int y, byte red, byte green, byte blue, ref WriteableBitmap wb)
{
if(wb == null)
return;
int[] PixelsBuffer = new int[1];
unchecked
{
PixelsBuffer[0] = (int)( 0xFF000000 | (int)red << 16 | (int)green << 8 | blue);
}
int offset = ((y * wb.PixelWidth) + x) * 4;
Buffer.BlockCopy(PixelsBuffer, 0, wb.Pixels, offset, 4);
}
代码在行动
<Image x:Name="myImage" Source="/Assets/AlignmentGrid.png" Stretch="None" />
// draw a white line from (0,0) to (100, 100)
private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
{
WriteableBitmap wb = new WriteableBitmap((BitmapImage)this.myImage.Source);
for (int i = 0; i < 100; i++)
{
PutPixel(i, i, 0xFF, 0xFF, 0xFF, ref wb);
}
myImage.Source = wb;
}