将位图图像转换为矩阵

6

在 C# 中,我需要将已经转换为 Bitmap 的图像转换为一个大小等于图像宽度和高度的矩阵,该矩阵由 Bitmap 数据的 uint8 组成。换句话说,将 Bitmap 数据放入矩阵中并将它们转换为 uint8,以便我可以对矩阵行和列进行所需的计算。

1个回答

8
尝试像这样做: ```html 尝试像这样做: ```
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;
}

3
如果需要较慢的速度,可以使用 GetPixel。如果图像不是“小”的,则必须使用 Bitmap.Lockbits() 然后直接访问底层数据。根据图像的大小,也可能有必要使用专门的库(如AForge.Net,Streamwave,OpenCV,IPP...)。 - igrimpe
虽然它很慢(正如@igrimpe指出的那样),但它是正确的,这是代码的重要质量(忽略随机路径分配)。 - Alexei Levenkov
很遗憾,b1.GetPixle(i,j)无法工作,因为我的图像已经是位图格式且灰度化了。它无法将颜色转换为位图格式。 - Payam
在这种情况下,展示你创建灰度位图的代码部分。我仍然建议查看Bitmap.Lockbits,因为它不仅更快,而且可以提供byte(正如你在问题中所述),而不是color - igrimpe
这段代码很慢,有人能告诉我更快的方法吗? - user1512186
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接