C#中如何把图片转化为2维数组
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 );
}
展开全部
可以这样,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);//输出图片的格式
}
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);//输出图片的格式
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询