C# windowsPhone8:如何在windowsPhone8中将rgb图像转换为二进制图像

C# windowsPhone8:如何在windowsPhone8中将rgb图像转换为二进制图像,c#,image,windows-phone-8,grayscale,binary-image,C#,Image,Windows Phone 8,Grayscale,Binary Image,我已经将rgb图像转换为灰度图像,我知道通过使用相同代码的阈值,我可以得到真正的黑白(二进制)图像,但我在WP8中实现时遇到了问题。无论我指定什么样的阈值,结果都是完整的背面图像(我还尝试了各种阈值)。 这是rgb到灰度的代码。请告诉我如何修改此代码以获得二进制图像 private async void rgb2gray_Click(object sender, RoutedEventArgs e) { if (takenImage !=

我已经将rgb图像转换为灰度图像,我知道通过使用相同代码的阈值,我可以得到真正的黑白(二进制)图像,但我在WP8中实现时遇到了问题。无论我指定什么样的阈值,结果都是完整的背面图像(我还尝试了各种阈值)。 这是rgb到灰度的代码。请告诉我如何修改此代码以获得二进制图像

 private async void rgb2gray_Click(object sender, RoutedEventArgs e)
            {
                if (takenImage != null)
                {
                    WriteableBitmap srcbitmp = takenImage.Source as WriteableBitmap;
                    byte[] srcpixels = new byte[4 * srcbitmp.PixelWidth * srcbitmp.PixelHeight];

                using (Stream pixelstream = srcbitmp.PixelBuffer.AsStream())
                {
                    await pixelstream.ReadAsync(srcpixels, 0, srcpixels.Length);
                }

                //create destination bitmap and pixel array
                WriteableBitmap dstbitmap = new WriteableBitmap(srcbitmp.PixelWidth, srcbitmp.PixelHeight);
                byte[] dstpixels = new byte[4 * dstbitmap.PixelWidth * dstbitmap.PixelHeight];

                for (int i = 0; i < srcpixels.Length; i += 4)
                {
                    double b = (double)srcpixels[i] / 255.0;
                    double g = (double)srcpixels[i + 1] / 255.0;
                    double r = (double)srcpixels[i + 2] / 255.0;

                    byte a = srcpixels[i + 3];

                    double z = (0.21 * r + 0.71 * g + 0.07 * b) * 255;

                    byte f = Convert.ToByte(z);


                        dstpixels[i] = f;
                    dstpixels[i + 1] = f;
                    dstpixels[i + 2] = f;
                    dstpixels[i + 3] = a;


                }
                //moving pixels into destination
                using (Stream pixelstream = dstbitmap.PixelBuffer.AsStream())
                {
                    await pixelstream.WriteAsync(dstpixels, 0, dstpixels.Length);

                }
                dstbitmap.Invalidate();
                //display new bitmap

                takenImage.Source = dstbitmap;
            }
        }
private async void rgb2gray\u单击(对象发送方,路由目标)
{
if(takenImage!=null)
{
WriteableBitmap srcbitmp=takenImage.Source作为WriteableBitmap;
byte[]srcpixels=新字节[4*srcbitmp.PixelWidth*srcbitmp.PixelHeight];
使用(Stream pixelstream=srcbitmp.PixelBuffer.AsStream())
{
等待pixelstream.ReadAsync(srcpixels,0,srcpixels.Length);
}
//创建目标位图和像素阵列
WriteableBitmap dstbitmap=新的WriteableBitmap(srcbitmp.PixelWidth,srcbitmp.PixelHeight);
byte[]dstpixels=新字节[4*dstbitmap.PixelWidth*dstbitmap.PixelHeight];
对于(int i=0;i
代码看起来不错,源图像像素是否产生任何有用的非零数据?是的,我想知道的是如何通过修改此代码来获得完整的黑白图像?代码看起来不错,源图像像素是否产生任何有用的非零数据?是的,我想知道的是如何通过修改代码来实现完整的黑白图像?