Navigation

Related Articles

Back to Latest Articles

C# Tutorial: How To Create An Image Negative


Andraz Krzisnik
C# Tutorial: How To Create An Image Negative

A negative image is a complete inversion of an image, we would say to be normal. In other words, dark areas will appear light, and light areas will become dark.

More in detail, a negative is created by subtracting the entire intensity range by values across all color channels of all pixels.

In an equation form this would look like:

Where Ac denotes a complement of A set of values. This basicaly means that every value of our normal image is being changed. Following with x and y, which are spatial coordinates of our image elements – pixels. Intensity is denoted by value z. K represents the maximum intensity or value a color channel can hold. For 8-bit images, this value would be 255.

Code implemented in C#

private Bitmap Negative(Bitmap image)
{
    int w = image.Width;
    int h = image.Height;
    BitmapData srcData = image.LockBits(new Rectangle(0, 0, w, h),
        ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
    int bytes = srcData.Stride * srcData.Height;
    byte[] buffer = new byte[bytes];
    byte[] result = new byte[bytes];
    Marshal.Copy(srcData.Scan0, buffer, 0, bytes);
    image.UnlockBits(srcData);
    int current = 0;
    int cChannels = 3;
    for (int y = 0; y < h; y++)
    {
        for (int x = 0; x < w; x++)
        {
            current = y * srcData.Stride + x * 4;
            for (int c = 0; c < cChannels; c++)
            {
                result[current + c] = (byte)(255 - buffer[current + c]);
            }
            result[current + 3] = 255;
        }
    }
    Bitmap resImg = new Bitmap(w, h);
    BitmapData resData = resImg.LockBits(new Rectangle(0, 0, w, h),
        ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb);
    Marshal.Copy(result, 0, resData.Scan0, bytes);
    resImg.UnlockBits(resData);
    return resImg;
}

Entire project is available for download here

Download Project

Before Negative

After Negative

 

Related Articles

Region Segmentation Using Superpixels

How To Make SLIC Superpixel Algorithm With C#

SLIC superpixel segmentation is a modern operation for reducing irrelevant detail for shortening computational time in further processing.

Posted on by Andraz Krzisnik
Morphological Processes

How To Make Thickening In Image Processing Work In C#

Thickening is a morphological operation in image processing, which adds foreground or white pixels to objects in order to thicken them.

Posted on by Andraz Krzisnik