原文:
Win8Metro(C#)数字图像处理--2.28图像乘法运算
[函数名称]
图像乘法函数MultiplicationProcess(WriteableBitmap src, WriteableBitmap mulSrc)
[函数代码]
/// <summary> /// Multiplication of two images(Both of them should be in same size). /// </summary> /// <param name="src">The first source image.</param> /// <param name="maskSrc">The second source image(It is an mask that each pixel of it is 0 or 1).</param> /// <returns></returns> public static WriteableBitmap MultiplicationProcess(WriteableBitmap src, WriteableBitmap maskSrc)////28图像乘法 { if (src != null) { int w = src.PixelWidth; int h = src.PixelHeight; WriteableBitmap mulImage = new WriteableBitmap(w, h); byte[] temp = src.PixelBuffer.ToArray(); byte[] mulTemp = maskSrc.PixelBuffer.ToArray(); byte[] dst = new byte[w * h * 4]; int r = 0, g = 0, b = 0; for (int i = 0; i < w; i++) { for (int j = 0; j < h; j++) { b = temp[i * 4 + (h - 1 - j) * w * 4] * mulTemp[i * 4 + (h - 1 - j) * w * 4]; g = temp[i * 4 + 1 + (h - 1 - j) * w * 4] * mulTemp[i * 4 + 1 + (h - 1 - j) * w * 4]; r = temp[i * 4 + 2 + (h - 1 - j) * w * 4] * mulTemp[i * 4 + 2 + (h - 1 - j) * w * 4]; dst[i * 4 + j * w * 4] = (byte)(b > 0 ? (b < 255 ? b : 255) : 0); dst[i * 4 + 1 + j * w * 4] = (byte)(g > 0 ? (g < 255 ? g : 255) : 0); dst[i * 4 + 2 + j * w * 4] = (byte)(r > 0 ? (r < 255 ? r : 255) : 0); dst[i * 4 + 3 + j * w * 4] = 0; b = 0; g = 0; r = 0; } } Stream sTemp = mulImage.PixelBuffer.AsStream(); sTemp.Seek(0, SeekOrigin.Begin); sTemp.Write(dst, 0, w * 4 * h); return mulImage; } else { return null; } }