private byte[] createImb()
{
lock (imbLock)
{
if (_imb != null) return _imb;
// get image data (for the raw data pointer)
BitmapData imGrayData =
_imGray.LockBits(new Rectangle(0, 0, _imGray.Width, _imGray.Height),
System.Drawing.Imaging.ImageLockMode.ReadOnly,
_imGray.PixelFormat);
_imb = new byte[_imGray.Width * _imGray.Height];
// copy image gray val's into normalized float (0.....1)
unsafe
{
for (int i = 0; i < imGrayData.Height; i++)
{
byte* row = (byte*)imGrayData.Scan0 + (i * imGrayData.Stride);
for (int j = 0; j < imGrayData.Width; j++)
{
_imb[i * imGrayData.Width + j] = row[j];
}
}
}
_imGray.UnlockBits(imGrayData);
return _imb;
}
}