将字节数组复制到c#中的结构数组

时间:2014-01-02 18:20:02

标签: c# arrays struct copy picturebox

我使用此代码将数据从bmp复制到c#中的结构数组, 当运行progrom显示消息“参数无效”

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

private void button1_Click(object sender, EventArgs e)
{
   byte[] bmp = File.ReadAllBytes("D:\\x.bmp");
   Bitmap img = new Bitmap(openFileDialog1.FileName);

   pix[,] bmpdata = new pix[img.Height-1, img.Width-1];  
   Array.Copy(bmp, 54, bmpdata, 0, (bmp.Length)-54);
}

程序有什么问题,是否有其他复制方法,我需要在图片框中显示新数组?

2 个答案:

答案 0 :(得分:0)

抱歉,你不能那样使用Array.Copy

您的源数组是byte[],目标数组是pix[,]。根据文档(Array.Copy Method (Array, Int32, Array, Int32, Int32)),数组维度必须相同。

  

sourceArraydestinationArray参数的维度必须相同。

但即使如此,你也无法使用Array.Copy,因为你真正要做的是将byte[]中的每3个连续项合并到pix[,]内的一个项目中。不幸的是,无法使用Array.Copy

答案 1 :(得分:0)

我可以想出几种方法可以获得你想要的像素信息数组 最明显的是像

Bitmap img = new Bitmap(openFileDialog1.FileName);
pix[,] bmpdata = new pix[img.Height-1, img.Width-1];
for (x=0;x<img.Width;x++)
for (y=0;y<img.Height;y++)
{
Color c=img.GetPixel(x,y);
pix[x,y].b=c.B;
pix[x,y].r=c.R;
pix[x,y].g=c.G;
}

但是你没有告诉我们为什么你想要这种形式的位图。所以我不能评论这段代码的合适程度。你有什么理由不能保留Bitmap并根据需要调用GetPixel吗?

我不知道您打算拆分的图像有多大或者您需要什么样的性能,但我可以想象嵌套的循环在大图像上不会很快。
您可以探索的替代方法(如果需要)将直接从流中读取数据到您需要的格式。但是,这需要您了解.bmp的文件格式。