Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何避免在图片框上绘制位图_C#_Bitmap - Fatal编程技术网

C# 如何避免在图片框上绘制位图

C# 如何避免在图片框上绘制位图,c#,bitmap,C#,Bitmap,我正在写一个C程序来显示一个音频信号,我的成功如下: 我把图片盒放在表格的滚动面板上。 对PCM数据进行采样并制作位图并将其放置在图片框中。 但最近我发现位图的大小限制在c2^16像素。因此,不可能使用位图对象显示长音频文件 我正在寻找一个替代的解决方案,直接绘制到图片框。谁能帮帮我吗 您可以创建自己的控件,而不是使用PictureBox。例如,从控件派生并重写OnPaintXXX事件 然后,您可以将示例信息传递给控件,并让它自己重新绘制。为了加快速度,你也可以分块画。我的意思是:将要绘制的区域

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

我把图片盒放在表格的滚动面板上。 对PCM数据进行采样并制作位图并将其放置在图片框中。 但最近我发现位图的大小限制在c2^16像素。因此,不可能使用位图对象显示长音频文件


我正在寻找一个替代的解决方案,直接绘制到图片框。谁能帮帮我吗

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


然后,您可以将示例信息传递给控件,并让它自己重新绘制。为了加快速度,你也可以分块画。我的意思是:将要绘制的区域划分为若干个矩形,独立地绘制所有的矩形?到位图中,并将位图绘制到相应的位置。

我不确定您从哪里获得这些信息。从MSDN:

图像的最大高度和宽度为2^16像素,每个通道32位*4个通道。位图源的最大大小为2^32字节64 GB,最大图像大小为4 GB像素。最小图像大小为1x1


我怀疑你们把最大宽度和高度理解为最大尺寸,而事实并非如此。它是一个方向上的最大像素数。

捕获picturebox.paint事件,并使用图形对象绘制。您需要创建几个屏幕外位图。控件的大小限制为2^16。所以不要使用图片盒。设置面板的AutoScrollMinSize属性并实现其绘制事件。使用AutoScrollPosition确定数据的索引位置。在其滚动事件中调用Invalidate。