【问题标题】:Generating extremely large images in C#在 C# 中生成超大图像
【发布时间】:2012-08-16 01:43:50
【问题描述】:

我需要生成一些大图,其宽度和高度可以达到数百万像素。请注意,我不想缩小图像。每个点必须代表一个像素。

现在使用 Bitmap 和 Graphics 对象,如果我将图像分割成更小的方块,这是很有可能的,但速度非常慢。

我已经计算了像素 RGB 值,所以想知道是否有办法用这些值创建一个字节数组并手动将它们保存为未压缩的 BMP 格式文件,而不是处理 Bitmap 类和 Graphics 的绘图函数类。

如果这有助于加快流程,我对不安全的代码感到满意。

【问题讨论】:

  • 您的意思是总共“百万像素”,例如 1024 x 1024 大约是一百万像素,还是您的意思是 尺寸 是 1000000 x 1000000?如果是后者,您打算将 TB 级的图像数据存储在哪里?
  • 我知道我没有帮助,但它会是什么.. 1 TB / 图像?
  • 只有 256 色的图像才 1 TB。 24 位颜色为 3 TB/图像。
  • (1) 你的用例是什么? Different graphic file formats 用于特定的业务应用程序(例如,DICOM 用于放射系统)。 (2) 如果这是通用的,你确定向量不是更好的解决方案吗?
  • 你打算用什么程序来读取这样的图像?

标签: c# .net memory bitmap


【解决方案1】:

如果您要显示图表,为什么不使用 SVG 之类的技术,这种技术可以用很少的处理能力即时渲染,但由于矢量扩展可以缩放到近乎无限的大小?

【讨论】:

  • 如果有好的渲染客户端,我很想知道如何生成 SVG 表示。
  • 您的客户端平台是什么?网络?桌面?移动的?所有这些?
  • .NET c# 桌面应用程序。我正在考虑推出我自己的客户。当然不是 SVG,只是一个交互式工具,允许使用我自己的矢量数据进行平移和缩放。
  • 是的,我认为如果您能避免大的位图图像,您会更成功地广泛部署。这是一个 C# SVG 渲染器。还有其他的。 sharpvectors.codeplex.com
【解决方案2】:

(虽然有一个很好的问题,是否有任何东西能够读取这些文件......)

BMP format 非常简单 - 您可以将其直接写入磁盘(我建议避免在内存中构建大文件,除非您有其他理由这样做)。有一个固定大小的标题,然后(对于 24bpp)在某个宽度上对齐的颜色序列。假设您可以选择宽度,您甚至不需要添加任何填充 - 只需为每个像素添加颜色行。

【讨论】:

  • 至于阅读,我可以构建一个简单的应用程序,通过鼠标交互加载和显示部分图像。感谢您的 24bpp 提示。虽然在 Jordan 的建议下,我正在考虑为应该很容易修补的矢量构建自己的渲染客户端。
猜你喜欢
  • 2011-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-11
  • 2018-06-05
  • 2011-06-15
  • 2014-06-23
相关资源
最近更新 更多