C# windowsPhone8:如何在windowsPhone8中将rgb图像转换为二进制图像
我已经将rgb图像转换为灰度图像,我知道通过使用相同代码的阈值,我可以得到真正的黑白(二进制)图像,但我在WP8中实现时遇到了问题。无论我指定什么样的阈值,结果都是完整的背面图像(我还尝试了各种阈值)。 这是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 !=
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
代码看起来不错,源图像像素是否产生任何有用的非零数据?是的,我想知道的是如何通过修改此代码来获得完整的黑白图像?代码看起来不错,源图像像素是否产生任何有用的非零数据?是的,我想知道的是如何通过修改代码来实现完整的黑白图像?