红色、绿色和蓝色值数组到彩色位图
本文关键字:数组 彩色 位图 蓝色 红色 | 更新日期: 2023-09-27 18:00:16
我正在尝试从单独的红色、绿色和蓝色数组创建一个位图,以便以后可以使用此位图为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类,可以在这里找到: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)
我自己也在一些项目中使用过这个类,我发现它比标准的要快得多。NET函数。上面的链接甚至有一个基准测试,你可以运行它来看看它有多快