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

 我来答
百度网友1c6e06f
2014-03-03 · TA获得超过2894个赞
知道小有建树答主
回答量:695
采纳率:66%
帮助的人:656万
展开全部

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

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 );
}

1997排长
高粉答主

2016-01-14 · 说的都是干货,快来关注
知道大有可为答主
回答量:1.1万
采纳率:0%
帮助的人:803万
展开全部
可以这样,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);//输出图片的格式
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式