C#getPixel和内存法读取灰度图信息
getPixel方法:
private int getPixels(Bitmap bmpobj) { int[,] data = new int[1920, 1200]; int max = 0; for (int i = 0; i < bmpobj.Height; i++) { for (int j = 0; j < bmpobj.Width; j++) { Color b = bmpobj.GetPixel(j, i); if (max < b.R) { max = b.R; } } } return max; }
内存法:
private int GetImgInfo(Bitmap a) { Bitmap src = new Bitmap(a); int w = src.Width; int h = src.Height; int max = 0; BitmapData srcData = src.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb); unsafe { byte* p = (byte*)srcData.Scan0; int gray = 0; for (int j = 1; j < h - 1; j++) { for (int i = 1; i < w - 1; i++) { gray = p[0] ;//+= (p[0] + p[1] + p[2]) / 3; p += 4; if (max < gray) { max = gray; } } p += srcData.Stride - w * 4; } src.UnlockBits(srcData); return max ; } }
根据数组画图
private Bitmap drawPic(byte[] srcdata, int width, int height) { // 8bit索引方式位图,设置灰度调色板 var fmt = PixelFormat.Format8bppIndexed; var bmp = new Bitmap(width, height, fmt); var palette = bmp.Palette; for (var i = 0; i < 256; i++) { palette.Entries[i] = Color.FromArgb(i, i, i); } bmp.Palette = palette; // 把数据映射到256灰度,unsafe填充到位图 var bmpData = bmp.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.WriteOnly, fmt); unsafe { var p = (byte*)bmpData.Scan0; for (var i = 0; i < srcdata.Length; i++) { *p = (byte)(srcdata[i]); p++; } } bmp.UnlockBits(bmpData); return bmp; }
根据灰度图像读入一维数组 对于8位深度图像来说
public unsafe byte[] ToArray(Bitmap b) { BitmapData data = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), ImageLockMode.ReadOnly, b.PixelFormat); int height = data.Height; int stride = data.Stride; IntPtr ptr = data.Scan0; int scanBytesLength = stride * height; byte[] rgbValues = new byte[scanBytesLength]; unsafe { Marshal.Copy(ptr, rgbValues, 0, scanBytesLength); } b.UnlockBits(data); return rgbValues; }