【发布时间】:2012-11-20 20:28:16
【问题描述】:
在 C# 中,我需要将已经转换为位图的图像转换为由位图数据的 uint8 组成的图像宽度和高度大小的矩阵。换句话说,将位图数据放在矩阵中并将它们转换为 uint8,这样我就可以在矩阵的行和列上进行我打算做的计算。
【问题讨论】:
在 C# 中,我需要将已经转换为位图的图像转换为由位图数据的 uint8 组成的图像宽度和高度大小的矩阵。换句话说,将位图数据放在矩阵中并将它们转换为 uint8,这样我就可以在矩阵的行和列上进行我打算做的计算。
【问题讨论】:
试试这样的:
public Color[][] GetBitMapColorMatrix(string bitmapFilePath)
{
bitmapFilePath = @"C:\9673780.jpg";
Bitmap b1 = new Bitmap(bitmapFilePath);
int hight = b1.Height;
int width = b1.Width;
Color[][] colorMatrix = new Color[width][];
for (int i = 0; i < width; i++)
{
colorMatrix[i] = new Color[hight];
for (int j = 0; j < hight; j++)
{
colorMatrix[i][j] = b1.GetPixel(i, j);
}
}
return colorMatrix;
}
【讨论】:
GetPixel。如果图像不是小,则必须使用Bitmap.Lockbits(),然后直接访问底层数据。根据图像的大小,使用专门的库(AForge.Net、Streamwave、OpenCV、IPP ...)也可能有意义
Bitmap.Lockbits,因为它不仅更快,而且还给你byte(正如你在问题中所说)而不是color