Keith Adler
Keith Adler

Reputation: 21178

Convert 24 Bit BMP to Monochrome Bit in C#

How would I go about taking a BMP which is 24 bits and converting it to a Monochrome Bitmap? I am not concerned about losing colors, etc. and I do not want to use another file format.

Upvotes: 0

Views: 1296

Answers (1)

Ben
Ben

Reputation: 35663

There are basically two methods. You can use Interop methods to read the raw BMP data and write raw BMP data for a monchrome bitmap. There are googlable functions which will do this.

Or, better, you can use ImageMagickObject to convert the image using a stoichastic dither.

Do the second one.

If you do the first one, you should still use a stocichastic dither, but you will have to implement it by hand.

Edit: You asked "what do the following RGB values become"... the answer is they become what you want them to become. YOU DECIDE.

The obvious choices are to either use a strict threshold, where anything less than X becomes black, anything more becomes white, or you can use a stoichastic dither. Select two thresholds, black Threshold bt and white threshold wt, such that 0 < bt < wt < 255. Then for each point choose a random number q between 0.0. and 1.0. Compare the pixel brightness ((r+g+b)/3) to (q*(wt-bt)+bt). If it is greater or equal, it is white, if less, black. This will give you a nice dithered greyscale. For most purposes 31 and 224 are good values for bt and wt, but for photographic images 0 and 255 might be better.

Upvotes: 3

Related Questions