Click here to Skip to main content
13,056,229 members (104,287 online)
Rate this:
Please Sign up or sign in to vote.
How to swap Red and Blue channels on bitmap without using unsafe methods and fast in c#?

Thanks in advance.

Edit: Thanks . Here is the code in c#:
private Bitmap SwapRedAndBlueChannels(Bitmap bitmap)
            var imageAttr = new ImageAttributes();
            imageAttr.SetColorMatrix(new ColorMatrix(
                                                 new[] {0.0F, 0.0F, 1.0F, 0.0F, 0.0F},
                                                 new[] {0.0F, 1.0F, 0.0F, 0.0F, 0.0F},
                                                 new[] {1.0F, 0.0F, 0.0F, 0.0F, 0.0F},
                                                 new[] {0.0F, 0.0F, 0.0F, 1.0F, 0.0F},
                                                 new[] {0.0F, 0.0F, 0.0F, 0.0F, 1.0F}
            var temp = new Bitmap(bitmap.Width, bitmap.Height);
            GraphicsUnit pixel = GraphicsUnit.Pixel;
            using (Graphics g = Graphics.FromImage(temp))
                g.DrawImage(bitmap, Rectangle.Round(bitmap.GetBounds(ref pixel)), 0, 0, bitmap.Width, bitmap.Height,
                            GraphicsUnit.Pixel, imageAttr);
            return temp;
Posted 10-Mar-11 5:40am
Updated 10-Mar-11 6:32am
Rate this: bad
Please Sign up or sign in to vote.

Solution 2

You can do this by use of ImageAttributes.

Here[^] is an article that uses VB.NET, but the code is almost directly translatable to C#.
SAKryukov 10-Mar-11 12:15pm
Yes, this is good, my 5.
apaka 10-Mar-11 12:34pm
Thanks it works.
Rate this: bad
Please Sign up or sign in to vote.

Solution 1

Stack Overflow[^] adressed this recently.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
Top Experts
Last 24hrsThis month

Advertise | Privacy | Mobile
Web02 | 2.8.170728.5 | Last Updated 10 Mar 2011
Copyright © CodeProject, 1999-2017
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100