【问题标题】:How to avoid bitmaps while drawing on picture boxes在图片框上绘图时如何避免位图
【发布时间】:2011-12-01 15:18:49
【问题描述】:

我正在编写一个 C# 程序来显示音频信号,我成功如下,

  1. 我将图片框放在表单的滚动面板上。
  2. 对PCM数据进行采样,制作位图,放在图片框上。

但最近我发现位图的大小在 C# 中是有限的(2^16 像素)。因此,使用位图对象显示长音频文件是不可能的。

我正在寻找解决此问题的替代解决方案(直接绘制到图片框)。有人可以帮我吗?

【问题讨论】:

  • 捕获picturebox.paint 事件,并使用Graphics 对象进行绘制。您需要创建几个屏幕外Bitmaps。
  • 控件的大小限制为 2^16。所以不要使用图片框。设置面板的 AutoScrollMinSize 属性并实现其 Paint 事件。使用 AutoScrollPosition 找出索引数据的位置。在其 Scroll 事件中调用 Invalidate()。

标签: c# bitmap


【解决方案1】:

您可以创建自己的控件,而不是使用PictureBox。例如,从 Control 派生并覆盖 OnPaintXXX 事件。

然后您可以将示例信息传递给控件并让它自己重新绘制。为了加快速度,您也可以分块进行绘画。我的意思是:将要绘制的区域划分为多个矩形,将所有矩形独立(线程?)绘制成位图,并将位图绘制到各自的位置。

【讨论】:

    【解决方案2】:

    我不确定你从哪里得到这些信息。来自 MSDN: http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapsource.aspx

    图像的最大高度和宽度为 2^16 像素,每通道 32 位 * 4 通道。 BitmapSource 的最大大小为 2^32 字节(64 GB),最大图像大小为 4 GB。图片最小尺寸为 1x1。

    我怀疑您将“最大宽度和高度”读作“最大尺寸”,但事实并非如此。一个方向的最大像素数。

    【讨论】:

      猜你喜欢
      • 2018-03-19
      • 2015-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-07
      • 1970-01-01
      • 2010-10-25
      相关资源
      最近更新 更多