async void test() {
Color replaceBlack = Color.FromArgb(224,233,55,6);
Color replaceWhite = Color.FromArgb(224, 233, 222, 222);
// BitmapImage bmpimg = new BitmapImage();
WriteableBitmap source = this.imageSource1.Source as WriteableBitmap; //need make sure the .imageSource1.Source is WriteableBitmap
byte[] byteArray = null;
using (Stream stream = source.PixelBuffer.AsStream())
{
long streamLength = stream.Length;
byteArray = new byte[streamLength];
await stream.ReadAsync(byteArray, 0, byteArray.Length);
if (streamLength > 0)
{
for (int i = 0; i < streamLength; i += 4)
{
if (byteArray[i + 3] != 0)
{
int b = Convert.ToInt32(byteArray[i]);
int g = Convert.ToInt32(byteArray[i + 1]);
int r = Convert.ToInt32(byteArray[i + 2]);
int rB = ((((b * replaceBlack.B) / 255) + (((255 - b) * replaceWhite.B) / 255)) / 2);
int rG = ((((g * replaceBlack.G) / 255) + (((255 - g) * replaceWhite.G) / 255)) / 2);
int rR = ((((r * replaceBlack.R) / 255) + (((255 - r) * replaceWhite.R) / 255)) / 2);
byte blue = Convert.ToByte(rB);
byte green = Convert.ToByte(rG);
byte red = Convert.ToByte(rR);
byteArray[i] = blue; // Blue
byteArray[i + 1] = green; // Green
byteArray[i + 2] = red; // Red
}
}
}
}
if (byteArray != null)
{
int lw, lh;
lw = source.PixelWidth;
lh = source.PixelHeight;
WriteableBitmap wbbitmap = new WriteableBitmap(source.PixelWidth, source.PixelHeight);
Stream s = wbbitmap.PixelBuffer.AsStream();
s.Seek(0, SeekOrigin.Begin);
s.Write(byteArray, 0, lw * lh * 3);
s.Flush();
this.imageTarget2.Source = null;
this.imageTarget2.Source = wbbitmap;
}
}