The process is fairly simple, I manipulate each pixel by decrementing each RGB value with the provided level
unsafe static BitmapSource Darken(BitmapSource image, double level)
{
const int PIXEL_SIZE = 4;
int height = image.PixelHeight;
int width = image.PixelWidth;
var bitmap = new WriteableBitmap(image);
bitmap.Lock();
var backBuffer = (byte*)bitmap.BackBuffer.ToPointer();
for (int y = 0; y < height; y++)
{
var row = backBuffer + (y * bitmap.BackBufferStride);
for (int x = 0; x < width; x++)
for (int i = 0; i < PIXEL_SIZE; i++)
row[x * PIXEL_SIZE + i] = (byte)Math.Max(row[x * PIXEL_SIZE + i] - level, 0);
}
bitmap.AddDirtyRect(new Int32Rect(0, 0, width, height));
bitmap.Unlock();
return bitmap;
}
Hope you found this useful.
No comments:
Post a Comment