//throw new System.NotImplementedException();
string strLoad = @"C:\VectorQuantization\TrainingImages\RGB\1.bmp";
string strR = @"C:\Red.bmp";
string strG = @"C:\Green.bmp";
string strB = @"C:\Blue.bmp";
// Create a new bitmap.
Bitmap bmp = new Bitmap(strLoad);
Bitmap bmpR = new Bitmap(bmp);
Bitmap bmpG = new Bitmap(bmp);
Bitmap bmpB = new Bitmap(bmp);
// Lock the bitmap's bits.
Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
//24bppRGB
System.Drawing.Imaging.BitmapData bmpData =
bmpR.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite,
PixelFormat.Format24bppRgb);
//32bppArgb
//System.Drawing.Imaging.BitmapData bmpData =
// bmpR.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite,
// PixelFormat.Format32bppArgb);
// Get the address of the first line.
IntPtr ptr = bmpData.Scan0;
// Declare an array to hold the bytes of the bitmap.
int bytes = bmpData.Stride * bmp.Height;
byte[] rgbValues = new byte[bytes];
// Copy the RGB values into the array.
System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes);
if (bmpData.PixelFormat == PixelFormat.Format24bppRgb)
{
// Keep every third value. A 24bpp bitmap will look only red.
for (int counter = 0; counter < rgbValues.Length; counter += 3)
{
//rgbValues[counter] = 255;//Blue
//rgbValues[counter + 1] = 255;//Green
//rgbValues[counter + 2] = 255;//Red
}
}
if (bmpData.PixelFormat == PixelFormat.Format32bppArgb)
{
// Keep every third value. A 24bpp bitmap will look only red.
for (int counter = 0; counter < rgbValues.Length; counter += 4)
{
//rgbValues[counter] = 255;//Blue
//rgbValues[counter + 1] = 255;//Green
//rgbValues[counter + 2] = 255;//Red
rgbValues[counter + 3] = 255;//A
}
}
// Copy the RGB values back to the bitmap
System.Runtime.InteropServices.Marshal.Copy(rgbValues, 0, ptr, bytes);
// Unlock the bits.
bmpR.UnlockBits(bmpData);
// Save the R Image
bmpR.Save(strR);
请发表评论