将位图数组中的数据复制到bmp的新数组存储数据中

时间:2013-12-30 22:59:59

标签: c# arrays bitmap bitmapimage bitmapdata

我处理位图我读取bmp每像素24位,宽度320高度240,位置54中图像数据偏移开始的标题,使用c#

在bmp数组中的位置54我访问数据,我将数据存储在新数组中:

       struct pix  //structure for pixel in bmp image
       {
         public byte r;//Red
         public byte g;//Green
         public byte b;//Blue
        }; 


        Bitmap img = new Bitmap(opendialog1.FileName);

        string filename = opendialog1.FileName; 
        byte[] bmp = File.ReadAllBytes(filename); 

        int i=54;

        pix[ , ] bmpdata = new pix[img.Height, img.Width];  //create array of structure

        for (int row = 0; row < img.Height; row++)
        {
            for (int col = 0; col < img.Width; col++)
            {
                bmpdata[row, col].r = bmp[i];
                bmpdata[row, col].g = bmp[i + 1];
                bmpdata[row, col].b = bmp[i + 2];
                i += 3;
            }

这是将数据从bmp数据复制到新数组中的正确方法,我使用c#窗口形式吗?

1 个答案:

答案 0 :(得分:0)

不,这不是你获得像素数据的方式(颜色信息)。

通过调用GetPixel(x,y)

将自己与每个像素定义的颜色进行比较

您也可以与此方法进行比较:

        var pixels = new Color[img.Height*img.Width];
        for (int row = 0; row < img.Height; row++)
        {
            for (int col = 0; col < img.Width; col++)
            {
                pixels[row + col] = img.GetPixel(col, row);
            }
        }

如果您只想要字节数据,请使用img.Save()保存到新的MemoryStream,例如......