赞
踩
前面只提到加载8位灰度bmp图像,以下是24位灰度图像的加载和24位rgb(红绿蓝三色)图像转灰度图像的加载,作以补充。因为你操作的是图像buffer(8位图像数组),所以,此处是把bmp加载到buffer中。
string path = Environment.CurrentDirectory;
realtimeImage.Image = Bitmap.FromFile(curFileName);
glob_curBitmap = (Bitmap)realtimeImage.Image;
Rectangle rc = new Rectangle(0, 0, glob_curBitmap.Width, glob_curBitmap.Height);
System.Drawing.Imaging.BitmapData bmpdata = glob_curBitmap.LockBits(rc,
System.Drawing.Imaging.ImageLockMode.ReadWrite,
glob_curBitmap.PixelFormat);
IntPtr imageptr = bmpdata.Scan0;
int ww = glob_curBitmap.Width;
int hh = glob_curBitmap.Height;
int bytes=0;
if (glob_curBitmap.PixelFormat == PixelFormat.Format24bppRgb)
{
bytes = ww * hh * 3;//此处针对的是24位位图
}
if (glob_curBitmap.PixelFormat == PixelFormat.Format8bppIndexed)
{
bytes = ww * hh;
}
glob_rgbValues = new byte[bytes];
glob_buffer8 = new byte[ww * hh];
System.Runtime.InteropServices.Marshal.Copy(imageptr, glob_rgbValues, 0, bytes);
glob_curBitmap.UnlockBits(bmpdata);
if (glob_curBitmap.PixelFormat == PixelFormat.Format24bppRgb)
{
for (int j = 0; j < hh; j++)
{
for (int i = 0; i < ww; i = i + 1)
{
int nn = j * ww + i;
glob_buffer8[nn] = glob_rgbValues[nn * 3];//此处是24位灰度图像(黑白)
//此处glob_rgbValues[nn * 3+0]=glob_rgbValues[nn * 3+1]=glob_rgbValues[nn * 3+2]
}
}
}
if (glob_curBitmap.PixelFormat == PixelFormat.Format8bppIndexed)
{
for (int j = 0; j < hh; j++)
{
for (int i = 0; i < ww; i = i + 1)
{
int nn = j * ww + i;
glob_buffer8[nn] = glob_rgbValues[nn ];//此处是8位灰度图像
}
}
}
注: glob_rgbValues[nn * 3];//蓝色分量
glob_rgbValues[nn * 3+1];//绿色分量
glob_rgbValues[nn * 3+2];//红色分量
//此处是24位rgb图像转8位灰度图像
glob_buffer8[nn] = glob_rgbValues[nn * 3]*0.114+glob_rgbValues[nn * 3+1]*0.587+glob_rgbValues[nn * 3+2]*0.299;//彩色
如果是32位图像,则
glob_rgbValues[nn * 4];//蓝色分量
glob_rgbValues[nn * 4+1];//绿色分量
glob_rgbValues[nn * 4+2];//红色分量
glob_rgbValues[nn * 4+3];//alpha分量
bytes = ww * hh * 4;//此处针对的是32位Argb位图
for (int j = 0; j < hh; j++)
{
for (int i = 0; i < ww; i = i + 1)
{
int nn = j * ww + i;
glob_buffer8[nn] = glob_rgbValues[nn * 4];//此处是32位灰度图像(黑白);以下注释掉的是32位argb图像(彩色)
// glob_buffer8[nn] = glob_rgbValues[nn * 4]*0.114+glob_rgbValues[nn * 4+1]*0.587+glob_rgbValues[nn * 4+2]*0.299;
//不用glob_rgbValues[nn * 4+3]alpha分量
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。