Click here to Skip to main content
11,571,948 members (78,696 online)
Click here to Skip to main content

Tagged as

VB.NET Image Filters

, 10 Oct 2012 Ms-PL 57.4K 43
Rate this:
Please Sign up or sign in to vote.
A collection of 10 easy to use image filters in VB.NET
filters_small.png - Click to enlarge image

Introduction

I have seen a few image filters written in VB, but most are poorly implemented, slow or just overly-complex. So I decided to create a simple class that contains a variety of filters and is easy to use.

Background

I originally created this class to render a drop shadow on a custom shaped tooltip that I created in my spell check. Somewhat bored over my break, I decided to expand on this class and it quickly grew into its own project.

Using the Code

Using the filters is as easy as going:

Using b As New Bitmap("c:\test.png")
    b.Filters.DropShadow(Color.Black, New Point(8, 8), 4)
    b.Save("c:\test.png", Imaging.ImageFormat.Png)
End Using

The above will open the file c:\test.png, apply the DropShadow filter, and re-saves the image over the original file.

More details on specific filters and their options are listed later in this section.

The code can only be used on a bitmap object, so if you want to draw directly in a paint event, you will need to first render to a bitmap object like so:

Private Sub Form_Paint(ByVal sender As Object, _
    ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    'Create a bitmap object to draw onto
    Using b As New Bitmap(128, 128)
        'Create a graphics object so we can render onto the bitmap
        Using g = Graphics.FromImage(b)
            'Make graphics edges nice and "smooth"
            g.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
            'Draw a circle
            g.DrawEllipse(Pens.Red, New Rectangle(10, 10, 108, 108))
        End Using
        'Static the circle that we drew with amount of 8
        b.Filters.Static(8)
        'Draw the output to the form
        e.Graphics.DrawImage(b, New Point(0, 0))
    End Using
End Sub

The result of the code above will paint the following on your form:

In total there are 10 filters, which can be seen in the test projects. The filters and their settings are as follows:

'Alpha
'Makes the image translucent by the value specified
b.Filters.Alpha(Amount As Byte)
'Amount (0 - 255)
'    The amount of alpha to apply to the bitmap 0=Transparent 255=Opaque

'AlphaMask
'Creates a silhouette based on the alpha channel of an image
b.Filters.AlphaMask(AlphaColor As Color, SolidColor As Color)
'AlphaColor
'   The color that the transparent sections will be in the resulting bitmap
'SolidColor
'   The color that the solid sections will be in the resulting bitmap

'Brightness
'Makes the bitmap lighter or darker
b.Filters.Brightness(amount As Single)
'amount (-1 - 1)
'    The amount of brightness to apply to the bitmap 
'    (negative numbers darken the image positive lighten)

'DropShadow
'Adds a drop shadow to an image with alpha
b.Filters.DropShadow(ShadowColor As Color, Depth As Point, BlurAmount As Integer)
'ShadowColor
'    The color of the resulting shadow
'Depth
'    The x and y offsets for the shadow depth
'BlurAmount (2 +)
'    How blurred the shadow will appear

'EdgeDetection
'Highlights edges in black and white
b.Filters.EdgeDetection()

'Emboss
'Adds an emboss effect to the bitmap
b.Filters.Emboss()

'Fontify
'Creates an ASCII image (font representation) of an image
b.Filters.Fontify(font As Font, ColorCount As Byte, ColorAlso As Boolean)
'font
'    Specifies the font that is to be used with the ASCII image
'ColorCount
'    Specifies the amount of chars that will be used when generating the final image
'ColorAlso
'    If this value is true each char in the image output will be colored

'GausianBlur
'Applies a blur to the bitmap
b.Filters.GausianBlur(Amount As Integer)
'Amount (2 +)
'    Specifies the amount that the image will be blurred in pixels

'GrayScale
'Converts the bitmap a GrayScale Image
b.Filters.GrayScale()

'HSL
'Adjusts the Hue, Saturation and Luminance of a bitmap
b.Filters.HSL(hue As Single, sat As Single , lum As Single)
'hue (0 - 359 but can be any number .. if 361 or 721 is used this is
'equivalent to 1, 362 or 722 = 2 etc, 
'NOTE: some people prefer to use -180 to + 180 instead)
'    defines the hue of the resulting bitmap (0 = No Change)
'sat (-1 - 1)
'    defines the saturation of the resulting bitmap (0 = No Change)
'lum (-1 - 1)
'    defines the Luminance of the resulting bitmap (0 = No Change)

'Invert
'Inverts the colors of the bitmap object
b.Filters.Invert

'OilPainting
'Creates an artistic oil painting impression of an image
b.Filters.OilPainting(Amount As Integer, BleedTransparentEdges As Boolean)
'Amount
'    Specifies the brush size for the oil painting
'BleedTransparentEdges
'    Also applies the oil painting effect to the alpha channel

'Static
'Mixes the pixels up of the image to produce a static like effect 
'(Although no actual static is added :))
b.Filters.Static(Amount As Integer)
'Amount (0 +)
'    The zone (in pixels) to swap with other pixels (0 = No Change)

'TwoTone
'Gets the average color of each pixel and converts it to either black or white
b.Filters.TwoTone(Amount As Byte)
'Amount
'    The tollance used to determine whether the pixel is black or white

The Test Project

The test project includes two testing forms. The form that opens when you run the project (pictured below) allows you to load an image file and then specify the filters (and appropriate options for each filter) that you wish to apply.

There is also a simple test that just shows all of the filters that are possible with preset options (pictured below); this can be accessed by clicking the "Simple Test" button on the main form.

filters_small.png - Click to enlarge image

Downloads

Total downloads:

Downloads per day:

Change Log

20121011

  • GausianBlur now uses WPF rendering for faster results (~11x faster in tests)
  • Added ApplyWPFEffect that allows WPF effects to be used on bitmaps
  • Fixed a bug with the OilPainting filter where it would incorrectly paint transparent sections to parts of the image
  • Changed interface to support saving and added undo
  • Added TwoTone filter
  • Added Fontify filter
  • Added EdgeDetection filter

20120203

  • Added OilPainting Filter

20120103

  • Initial Release

Credits

All of the filters have been written by Kris Bennett here at i00 Productions unless stated below.

HSL - This filter is a modified version of the one by Miran.Uhan, the original article can be found here.

License

This article, along with any associated source code and files, is licensed under The Microsoft Public License (Ms-PL)

Share

About the Author

i00
Software Developer (Senior) i00 Productions
Australia Australia
I hope you enjoy my code. It's yours to use for free, but if you do wish to say thank you then a donation is always appreciated.
You can donate here.

You may also be interested in...

Comments and Discussions

 
QuestionTake 5! Pin
Jens-Madsen27-Feb-14 21:32
memberJens-Madsen27-Feb-14 21:32 
AnswerRe: Take 5! Pin
i0028-Feb-14 1:07
professional i0028-Feb-14 1:07 
GeneralMy vote of 2 Pin
Rameez Raja (RAJ)12-Dec-13 7:08
professionalRameez Raja (RAJ)12-Dec-13 7:08 
GeneralRe: My vote of 2 Pin
i0013-Dec-13 4:36
professional i0013-Dec-13 4:36 
GeneralMy vote of 5 Pin
ketan italiya6-Aug-13 0:42
professionalketan italiya6-Aug-13 0:42 
GeneralRe: My vote of 5 Pin
i006-Aug-13 16:08
professional i006-Aug-13 16:08 
QuestionRe: My vote of 5 Pin
Ravi Bhavnani9-Sep-13 15:54
professionalRavi Bhavnani9-Sep-13 15:54 
AnswerRe: My vote of 5 Pin
i0013-Sep-13 21:11
professional i0013-Sep-13 21:11 
GeneralRe: My vote of 5 Pin
Ravi Bhavnani14-Sep-13 11:04
professionalRavi Bhavnani14-Sep-13 11:04 
AnswerRe: My vote of 5 Pin
i0014-Sep-13 0:43
professional i0014-Sep-13 0:43 
GeneralRe: My vote of 5 Pin
Ravi Bhavnani14-Sep-13 11:03
professionalRavi Bhavnani14-Sep-13 11:03 
GeneralRe: My vote of 5 Pin
i0014-Sep-13 15:42
professional i0014-Sep-13 15:42 
AnswerRe: My vote of 5 Pin
Ravi Bhavnani15-Sep-13 8:16
professionalRavi Bhavnani15-Sep-13 8:16 
AnswerRe: My vote of 5 Pin
Ravi Bhavnani15-Sep-13 9:22
professionalRavi Bhavnani15-Sep-13 9:22 
GeneralRe: My vote of 5 Pin
i0015-Sep-13 13:27
professional i0015-Sep-13 13:27 
GeneralRe: My vote of 5 Pin
Ravi Bhavnani15-Sep-13 13:48
professionalRavi Bhavnani15-Sep-13 13:48 
GeneralRe: My vote of 5 Pin
Ravi Bhavnani17-Sep-13 11:56
professionalRavi Bhavnani17-Sep-13 11:56 
GeneralRe: My vote of 5 Pin
i0017-Sep-13 13:11
professional i0017-Sep-13 13:11 
QuestionUsing the filters in a new project Pin
tomweber31-Oct-12 22:50
membertomweber31-Oct-12 22:50 
AnswerRe: Using the filters in a new project Pin
tweber201231-Oct-12 23:22
membertweber201231-Oct-12 23:22 
GeneralRe: Using the filters in a new project Pin
i001-Nov-12 4:10
memberi001-Nov-12 4:10 
AnswerRe: Using the filters in a new project Pin
i001-Nov-12 4:14
memberi001-Nov-12 4:14 
QuestionSystem.Design missing for me in FrameWork 4 Pin
tomweber19-Oct-12 7:29
membertomweber19-Oct-12 7:29 
AnswerRe: System.Design missing for me in FrameWork 4 Pin
i0019-Oct-12 15:19
memberi0019-Oct-12 15:19 
QuestionNice code............ Pin
Patil Kishor10-Oct-12 7:28
memberPatil Kishor10-Oct-12 7:28 
QuestionSaving Issue Pin
storm625-Aug-12 19:42
memberstorm625-Aug-12 19:42 
AnswerRe: Saving Issue Pin
i0025-Aug-12 19:48
memberi0025-Aug-12 19:48 
GeneralRe: Saving Issue Pin
storm626-Aug-12 17:38
memberstorm626-Aug-12 17:38 
GeneralRe: Saving Issue Pin
i0026-Aug-12 17:47
memberi0026-Aug-12 17:47 
GeneralRe: Saving Issue Pin
storm626-Aug-12 23:20
memberstorm626-Aug-12 23:20 
GeneralRe: Saving Issue Pin
i0027-Aug-12 0:07
memberi0027-Aug-12 0:07 
GeneralRe: Saving Issue Pin
storm627-Aug-12 18:04
memberstorm627-Aug-12 18:04 
GeneralRe: Saving Issue Pin
i0027-Aug-12 0:13
memberi0027-Aug-12 0:13 
GeneralRe: Saving Issue Pin
storm627-Aug-12 18:05
memberstorm627-Aug-12 18:05 
GeneralRe: Saving Issue Pin
i0015-Oct-12 14:01
memberi0015-Oct-12 14:01 
GeneralRe: Saving Issue Pin
storm616-Oct-12 5:27
memberstorm616-Oct-12 5:27 
GeneralRe: Saving Issue Pin
storm616-Oct-12 5:47
memberstorm616-Oct-12 5:47 
I have already developed a small applicatin of macro recording system I will share it with you it is in my office's pc.
QuestionVoting 0... Not going to blindly download Pin
Elkay24-Feb-12 10:14
memberElkay24-Feb-12 10:14 
AnswerRe: Voting 0... Not going to blindly download Pin
i0027-Feb-12 15:25
memberi0027-Feb-12 15:25 
GeneralMy vote of 5 Pin
manoj kumar choubey23-Feb-12 21:20
membermanoj kumar choubey23-Feb-12 21:20 
AnswerWhy the downloads are broken Pin
Zac Greve17-Feb-12 4:35
memberZac Greve17-Feb-12 4:35 
GeneralRe: Why the downloads are broken Pin
i0021-Feb-12 2:05
memberi0021-Feb-12 2:05 
QuestionDownload Broken [Modified] Pin
Zac Greve16-Feb-12 18:53
memberZac Greve16-Feb-12 18:53 
SuggestionClarification is not enough. Pin
Md. Marufuzzaman7-Feb-12 19:56
mentorMd. Marufuzzaman7-Feb-12 19:56 
GeneralMy vote of 5 Pin
dean.armstrong5-Feb-12 17:47
memberdean.armstrong5-Feb-12 17:47 
GeneralMy vote of 3 Pin
Dave Kreskowiak4-Feb-12 17:24
mvpDave Kreskowiak4-Feb-12 17:24 
GeneralRe: My vote of 3 Pin
i004-Feb-12 17:50
memberi004-Feb-12 17:50 
GeneralRe: My vote of 3 Pin
Dave Kreskowiak5-Feb-12 3:57
mvpDave Kreskowiak5-Feb-12 3:57 
GeneralRe: My vote of 3 Pin
i005-Feb-12 12:34
memberi005-Feb-12 12:34 
GeneralRe: My vote of 3 Pin
Dave Kreskowiak5-Feb-12 16:26
mvpDave Kreskowiak5-Feb-12 16:26 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web03 | 2.8.150624.2 | Last Updated 10 Oct 2012
Article Copyright 2012 by i00
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid