当宽度为奇数个象素的图片读入内存的时候,再从内存里读出象素值进行二值化处理后显示就会有扭曲,怎么处理这样的情况呢?
读入象素值的代码如下
BitmapData bmData = m_Bitmap.LockBits(new Rectangle(0, 0,m_Bitmap.Width,m_Bitmap.Height),
ImageLockMode.ReadWrite, m_Bitmap.PixelFormat);
int stride = bmData.Stride;
System.IntPtr Scan0 = bmData.Scan0;unsafe
{
byte* pixelInfo = (byte *)(void *)Scan0;
int nOffset = stride - m_Bitmap.Width*3;
byte red, green, blue;
for(int y=0;y<m_Bitmap.Height;++y)
{
grayLevelArray[y]=new int[m_Bitmap.Width];
for(int x=0; x < m_Bitmap.Width; ++x)
{
blue  = pixelInfo[0];
green = pixelInfo[1];
red   = pixelInfo[2];
int grayLevel = (int)(0.3*red + 0.59*green + 0.11*blue);
grayLevelArray[y][x]=grayLevel;
grayLevelPixelsArray[grayLevel]++;
pixelInfo += 3;
}
pixelInfo += nOffset;
}