我正在尝试将 1600*900 图像的列表连接为马赛克,但我无法分配(例如)每 100k 100k 的位图。
因此,我正在寻找一种方法来创建位图文件并以类似流的方式在其上写入。
我能怎么做?谢谢你。
我正在尝试将 1600*900 图像的列表连接为马赛克,但我无法分配(例如)每 100k 100k 的位图。
因此,我正在寻找一种方法来创建位图文件并以类似流的方式在其上写入。
我能怎么做?谢谢你。
虽然 100k x 100k 图像的确切实用价值尚不清楚,但解决方案可能是:
在生成的 W-by-H 马赛克中创建源图像的偏移列表。这里的一些计算:100k×100k 图像可以容纳大约 50×100 图像(仅 5k,一个合理的数字)。因此,您只需要偏移数组中的约 5000 个元素,这远非大。使用这个答案(http://stackoverflow.com/questions/8762569/how-is-2d-bin-packing-achieved-programmatically/10339522)来计算这些偏移量。
将图像头写入文件流(例如,参见 .BMP 格式的 54 字节头)
“低效”部分:将 (100k-by-100k)*BytesPerPixel 零写入文件,然后逐一迭代将图像写入此文件。
InsertImageToStream() 是逐行完成的,我认为它非常简单。
第 3 步的优化:当 offsets[] 数组按 Y 排序,然后按 X 排序时,您可以优化填充结果图像的每个扫描线,而无需过多的 FileStream.seek() 调用。