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

 

Show Comments (0)

Comments

Related Articles

C# Basics

C# Basics – Variables and Data Types – Part 4

Variables and Data Types Software works with data that’s stored in the memory. All this data, to be usable, needs to be stored in some defined space. We name these spaces...

Posted on by Andraz Krzisnik
C# Tutorial

C# Tutorial: How To Scale Images Without Deforming Them

Let’s Get Started A very basic problem that we face in image processing is how to scale images without making them look deformed when we want to make it of an arbitrary...

Posted on by Andraz Krzisnik