红色、绿色和蓝色值数组到彩色位图
Red, Green and Blue value arrays to color bitmap
我正在尝试从单独的红色、绿色和蓝色数组创建位图,以便稍后可以使用此位图为 avi 文件 (SharpAVI) 创建帧。我已经尝试了以下有效的代码:
Bitmap Bmp = new Bitmap(Width, Height);
for (int ii = 0; ii < (Width*Height); ii++)
{
ypos = ii / Width;
xpos = ii % Width;
Bmp.SetPixel(xpos, ypos, Color.FromArgb(dataR[ii], dataG[ii], dataB[ii]));
}
数组 dataR、dataG 和 dataB 包含从 0,0 开始到宽度、高度结束的颜色值(0 到 255)。但是,这段代码相当慢。我更愿意直接从数据中生成位图,但我不确定如何。我四处搜寻,发现了以下方向的东西:
Bitmap bm_Image = new Bitmap(Width, Height, Stride, PixelFormat.Format24bppRgb, ipPtrRGB);
但我不完全理解它是如何工作的。我读过一些关于填充数据等的内容。有人知道一种快速执行此操作的方法吗?
如果您想更快地使用位图,我建议您使用此 LockBitmap class,可在此处找到:
http://www.codeproject.com/Tips/240428/Work-with-bitmap-faster-with-Csharp
实现比较简单,您可以使用您目前正在使用的相同数据结构。这就是您的代码的 LockBitmap
实现的样子:
Bitmap Bmp = new Bitmap(Width, Height);
LockBitmap lockBitmap = new LockBitmap(Bmp);
lockBitmap.LockBits();
for (int ii = 0; ii < (Width*Height); ii++)
{
ypos = ii / Width;
xpos = ii % Width;
lockBitmap.SetPixel(xpos, ypos, Color.FromArgb(dataR[ii], dataG[ii], dataB[ii]));
}
lockBitmap.UnlockBits();
Bmp.Save(filename)
我自己在几个项目中使用了这个 class,我发现它比标准的 .NET 函数快得多。上面的 link 甚至有一个基准测试,你可以 运行 看看它有多快。
我正在尝试从单独的红色、绿色和蓝色数组创建位图,以便稍后可以使用此位图为 avi 文件 (SharpAVI) 创建帧。我已经尝试了以下有效的代码:
Bitmap Bmp = new Bitmap(Width, Height);
for (int ii = 0; ii < (Width*Height); ii++)
{
ypos = ii / Width;
xpos = ii % Width;
Bmp.SetPixel(xpos, ypos, Color.FromArgb(dataR[ii], dataG[ii], dataB[ii]));
}
数组 dataR、dataG 和 dataB 包含从 0,0 开始到宽度、高度结束的颜色值(0 到 255)。但是,这段代码相当慢。我更愿意直接从数据中生成位图,但我不确定如何。我四处搜寻,发现了以下方向的东西:
Bitmap bm_Image = new Bitmap(Width, Height, Stride, PixelFormat.Format24bppRgb, ipPtrRGB);
但我不完全理解它是如何工作的。我读过一些关于填充数据等的内容。有人知道一种快速执行此操作的方法吗?
如果您想更快地使用位图,我建议您使用此 LockBitmap class,可在此处找到: http://www.codeproject.com/Tips/240428/Work-with-bitmap-faster-with-Csharp
实现比较简单,您可以使用您目前正在使用的相同数据结构。这就是您的代码的 LockBitmap
实现的样子:
Bitmap Bmp = new Bitmap(Width, Height);
LockBitmap lockBitmap = new LockBitmap(Bmp);
lockBitmap.LockBits();
for (int ii = 0; ii < (Width*Height); ii++)
{
ypos = ii / Width;
xpos = ii % Width;
lockBitmap.SetPixel(xpos, ypos, Color.FromArgb(dataR[ii], dataG[ii], dataB[ii]));
}
lockBitmap.UnlockBits();
Bmp.Save(filename)
我自己在几个项目中使用了这个 class,我发现它比标准的 .NET 函数快得多。上面的 link 甚至有一个基准测试,你可以 运行 看看它有多快。