C# GDI+;

C# GDI+;,c#,winforms,gdi+,picturebox,flowlayoutpanel,C#,Winforms,Gdi+,Picturebox,Flowlayoutpanel,好吧,我知道这个问题在网络上到处都是,但我认为我读过的任何解决方案都不适合我的具体问题 背景 我正在编写一个小型的C#WinForm应用程序,我们公司的用户可以在其中查看、编辑和处理图像文件。图像详细信息(文件类型、存储位置等)存储在数据库中,当用户从DataGridView中选择给定文件时,图像的第一页显示在“主”PictureBox控件中,而所有后续页面(如果是多页文档)的缩略图则显示在附近 打开图像时,程序将文档拆分为多个图像,为每个图像创建一个新的PictureBox控件,并将该Pict

好吧,我知道这个问题在网络上到处都是,但我认为我读过的任何解决方案都不适合我的具体问题

背景 我正在编写一个小型的C#WinForm应用程序,我们公司的用户可以在其中查看、编辑和处理图像文件。图像详细信息(文件类型、存储位置等)存储在数据库中,当用户从DataGridView中选择给定文件时,图像的第一页显示在“主”PictureBox控件中,而所有后续页面(如果是多页文档)的缩略图则显示在附近

打开图像时,程序将文档拆分为多个图像,为每个图像创建一个新的PictureBox控件,并将该PictureBox添加到FlowLayoutPanel,这就是发生错误的地方

我已经用单页和多页图像测试了这个程序,除了打开一个包含很多页面(180+)的图像外,一切都很好。如果程序必须打开并使用少于该页面的图像,则一切正常。但是,当我测试200多页的图像时,我会收到:

System.Drawing.dll中发生“System.Runtime.InteropServices.ExternalException”类型的异常,但未在用户代码中处理

其他信息:GDI+中发生一般错误“

不管图像有多大(190200300500页),错误通常发生在第185页标记附近(但并不总是第185页)

我不认为错误与图像本身或图像处理方式有关;所有其他图像(即页面较少的图像)都可以。我添加到flowlayout面板的picturebox控件的数量/大小等可能有限制


有什么想法吗?

您可能想看看GDI堆。您可以为此使用任务管理器。。避免这种情况的一种方法可能是选择一种普通尺寸(顺便说一句,不要添加所有那些图片框,每个图片框都是一个控件,你可以使用ListView,View=LargeIcon来显示你的缩略图,这样可以节省资源。谢谢你的评论。我已经更新了代码,改为使用ListView。到目前为止,对于较小的图片,这肯定是一个比我以前做的更好的选择。但是,t除了这个问题外,还有很多页面的图像。为了缩小范围,我拿出了所有与显示图像相关的代码,只专注于页面的拆分。这与图像tempImg=(Image)originalImage.Clone()有关;如果我做同样的事情,但是像Image tempImg=originalImage;那么它很好。因此……它“工作”,但是如果我对图像进行更改,它将影响我想要保留的原始副本。您可能需要查看GDI堆。您可以使用任务管理器进行此操作。避免这种情况的一种方法可能是选择一个公共大小(顺便说一句,不要添加所有那些图片框,每个图片框都是一个控件,你可以使用ListView,View=LargeIcon来显示你的缩略图,这样可以节省资源。谢谢你的评论。我已经更新了代码,改为使用ListView。到目前为止,对于较小的图片,这肯定是一个比我以前做的更好的选择。但是,t除了这个问题外,还有很多页面的图像。为了缩小范围,我拿出了所有与显示图像相关的代码,只专注于页面的拆分。这与图像tempImg=(Image)originalImage.Clone()有关;如果我做同样的事情,但是像Image tempImg=originalImage;那么它很好。所以…它“起作用”,但是如果我对图像进行更改,它将影响我想要保留的原始副本。