C#中如何把图片转化为2维数组

如题所述

以下是测试代码和验证结果:

static void Main( params string[] args )
{
    Bitmap img = new Bitmap( @"E:\tempfolder\testimage.bmp" );   // 导入一张RGB彩色图片
    Rectangle lockRect = new Rectangle( 0, 0, img.Width, img.Height );
    BitmapData imgData = img.LockBits( lockRect, ImageLockMode.ReadOnly, img.PixelFormat );
            
    byte[,] rband = new byte[ img.Height, img.Width ];   // 彩色图片的R、G、B三层分别构造一个二维数组
    byte[,] gband = new byte[ img.Height, img.Width ];
    byte[,] bband = new byte[ img.Height, img.Width ];
    int rowOffset = imgData.Stride - img.Width * 3;

    // 这里不用img.GetPixel方法,而采用效率更高的指针来获取图像像素点的值
    unsafe
    {
        byte* imgPtr = ( byte* )imgData.Scan0.ToPointer();

        for( int i = 0; i < img.Height; ++i )
        {
            for( int j = 0; j < img.Width; ++j )
            {
                rband[ i, j ] = imgPtr[ 2 ];   // 每个像素的指针是按BGR的顺序存储的
                gband[ i, j ] = imgPtr[ 1 ];
                bband[ i, j ] = imgPtr[ 0 ];

                imgPtr += 3;   // 偏移一个像素
            }
            imgPtr += rowOffset;   // 偏移到下一行
        }
    }

    img.UnlockBits( imgData );
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-01-14
可以这样,image是个抽象类,不管用imge[]数组还是list<image> 都只是第一步,需要的是往数组里面存image;

List<Image> imgArr = new List<Image>();
imgArr.Add(Image.FromFile("a.jpg", false));
imgArr.Add(Image.FromFile("a.jpg", false));
imgArr.Add(Image.FromFile("a.jpg", false));
System.Collections.IEnumerator itor = imgArr.GetEnumerator();
while (itor.MoveNext())
{
Console.WriteLine(((Image)itor.Current).RawFormat);//输出图片的格式
}
相似回答