在我的项目中,我一个接一个地拍摄视频帧,将它们压缩成1x1像素,然后将其颜色存储在列表中。问题是,如果我拍摄 ~9,5 分钟的视频,以 25 fps 的速度,它只处理大约 15-20% 的内存,然后用完 2gb 的内存。但是我使用 64 位操作系统和处理器,我不知道如何为我的项目分配更多的内存。此外,颜色列表将快速读取(每秒 25-30 次(,因此我认为创建临时文件不是一种选择,或者至少我想尝试分配更多 ram。因此,问题是:如何为我的 .net 4.7 代码分配超过 2 GB 的空间?
我的图像处理代码:
List<Color> VideoFramesData = new List<Color>();
//fires when i click "parse" button in my form:
private void ParseVideoButton_Click(object sender, EventArgs e)
{
while (VideoReader.Read())
{
VideoFramesData.Add(CollapseBitmap(VideoReader.GetFrame()));
}
}
//Image downscaling function:
public Color CollapseBitmap(Bitmap bmp)
{
Color FrameColor;
Bitmap result = new Bitmap(1, 1);
Graphics g = Graphics.FromImage(result);
g.InterpolationMode = InterpolationMode.NearestNeighbor;
g.DrawImage(bmp, 0, 0, 1, 1);
FrameColor = result.GetPixel(0, 0);
result.Dispose();
g.Dispose();
return FrameColor;
}
好的,确定了我的问题:我不是 Bitmap.Dispose'ing 的 bmp 函数参数,事实证明,你必须这样做。好吧,我知道的越多!