Image visualc&x2B+;,系统图形中的系统参数异常(Windows窗体)
运行程序并尝试加载映像时会显示此错误: System.Drawing.dll中发生类型为“System.ArgumentException”的首次意外异常 System.Drawing.dll中发生类型为“System.ArgumentException”的未处理异常 其他信息:参数无效 这是我的密码: 基本上,有一个数字UpDown、一个按钮、一个openFileDialog和一个pictureBox。用户根据要加载的图片更改numericUpDown的值(用户不必打开openFileDialog)。例如,如果用户选择“3”作为numericUpDown的值,则openFileDialog的文件名将为:Image visualc&x2B+;,系统图形中的系统参数异常(Windows窗体),image,exception,load,c++-cli,Image,Exception,Load,C++ Cli,运行程序并尝试加载映像时会显示此错误: System.Drawing.dll中发生类型为“System.ArgumentException”的首次意外异常 System.Drawing.dll中发生类型为“System.ArgumentException”的未处理异常 其他信息:参数无效 这是我的密码: 基本上,有一个数字UpDown、一个按钮、一个openFileDialog和一个pictureBox。用户根据要加载的图片更改numericUpDown的值(用户不必打开openFileDial
Public:
void Set_FilePath()
{
int n = (int)numericUpDown1->Value;
switch (n)
{
case 1: openFileDialog1->FileName = "C:\Users\Public\Pictures\Sample Pictures\Chrysanthemum.jpg"; break;
case 2: openFileDialog1->FileName = "C:\Users\Public\Pictures\Sample Pictures\Desert.jpg"; break;
case 3: openFileDialog1->FileName = "C:\Users\Public\Pictures\Sample Pictures\Hydrangeas.jpg"; break;
case 4: openFileDialog1->FileName = "C:\Users\Public\Pictures\Sample Pictures\Jellyfish.jpg"; break;
case 5: openFileDialog1->FileName = "C:\Users\Public\Pictures\Sample Pictures\Koala.jpg"; break;
case 6: openFileDialog1->FileName = "C:\Users\Public\Pictures\Sample Pictures\Lighthouse.jpg"; break;
case 7: openFileDialog1->FileName = "C:\Users\Public\Pictures\Sample Pictures\Penguins.jpg"; break;
case 8: openFileDialog1->FileName = "C:\Users\Public\Pictures\Sample Pictures\Tulips.jpg"; break;
}
}
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
Bitmap^ myImage;
Set_FilePath();
myImage = gcnew Bitmap( openFileDialog1->FileName );
pictureBox1->SizeMode = PictureBoxSizeMode::StretchImage;
pictureBox1->Image = dynamic_cast <Image^> (myImage);
}
公共:
void Set_FilePath()
{
int n=(int)numericUpDown1->Value;
开关(n)
{
案例1:openFileDialog1->FileName=“C:\Users\Public\Pictures\Sample Pictures\jummy.jpg”中断;
案例2:openFileDialog1->FileName=“C:\Users\Public\Pictures\Sample Pictures\Desert.jpg”中断;
案例3:openFileDialog1->FileName=“C:\Users\Public\Pictures\Sample Pictures\Hydrangeas.jpg”中断;
案例4:openFileDialog1->FileName=“C:\Users\Public\Pictures\Sample Pictures\Jellyfish.jpg”中断;
案例5:openFileDialog1->FileName=“C:\Users\Public\Pictures\Sample Pictures\Koala.jpg”中断;
案例6:openFileDialog1->FileName=“C:\Users\Public\Pictures\Sample Pictures\Lighthouse.jpg”中断;
案例7:openFileDialog1->FileName=“C:\Users\Public\Pictures\Sample Pictures\Penguins.jpg”中断;
案例8:openFileDialog1->FileName=“C:\Users\Public\Pictures\Sample Pictures\Tulips.jpg”中断;
}
}
私有:系统::无效按钮1\u单击(系统::对象^sender,系统::事件参数^e){
位图^myImage;
设置文件路径();
myImage=gcnew位图(openFileDialog1->FileName);
pictureBox1->SizeMode=PictureBoxSizeMode::StretchImage;
pictureBox1->Image=dynamic\u cast(myImage);
}
我试图修复它:
我认为我没有正确地复制图像的方向。因此,我将代码更改为:
if(openFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK)
{
MessageBox::Show(openFileDialog1->FileName);
myImage = gcnew Bitmap( openFileDialog1->FileName );
pictureBox1->SizeMode = PictureBoxSizeMode::StretchImage;
pictureBox1->Image = dynamic_cast <Image^> (myImage);
}
if(openFileDialog1->ShowDialog()==System::Windows::Forms::DialogResult::OK)
{
MessageBox::Show(openFileDialog1->FileName);
myImage=gcnew位图(openFileDialog1->FileName);
pictureBox1->SizeMode=PictureBoxSizeMode::StretchImage;
pictureBox1->Image=dynamic\u cast(myImage);
}
这是完美的工作。此外,还会出现一个显示openFileDialog文件名的消息框。。。正确的图像方向。。。我不知道我的程序出了什么问题。问题是我不希望出现openFiledialog
(我使用Visual StudioC++ 2010,应用程序是用Windows窗体制作的),欢迎大家的帮助。
谢谢。图像和位图类引发的异常信息不是很丰富。由于多种原因,可能会出现“参数无效”异常。它可能是一个损坏的图像文件,在您的情况下不太可能,因为您使用的是库存Windows图像文件。它也可能是由于映像太大而无法放入可用虚拟内存地址空间造成的。你想要一个OutOfMemoryException,但GDI+对此很愚蠢 这是更可能的原因,当您运行一段时间时,您的程序很可能会像那样受到影响。图像可能需要大量非托管虚拟内存来存储其像素数据。当您不再使用该图像时,应将其释放。垃圾收集器将为您完成这项工作,但它并没有那么快。当然,位图类存在一个问题,它使用很少的GC堆,因此不太可能经常触发垃圾收集以避免麻烦 这就是它实现IDisposable接口的原因。Dispose()方法提前释放内存。你不是在叫它 您需要在代码中修复此问题,如下所示:
delete picureBox1->Image;
try {
myImage = gcnew Bitmap( openFileDialog1->FileName );
pictureBox1->Image = myImage;
}
catch (Exception^ ex) {
pictureBox1->Image = nullptr;
MessageBox::Show(ex->Message);
}
注意添加的delete操作符调用,即调用IDisposable::Dispose()的调用。它去除了旧图像,一个你不再需要的图像,因为你将要显示另一个图像。try/catch确保您的程序在芯片停机时保持运行,处理坏的图像文件或无法放入可用内存的怪物文件。通过以x64为目标来处理的类型,这样就可以得到一个64位程序。仍然不起作用:myImage=gcnew-Bitmap(openFileDialog1->FileName);Works 100%myImage=gcnew位图(textBox1->Text);同样有效100%myImage=gcnew BitMap(“图像”)不起作用(异常错误:参数无效),即使我按照您所说的方式修复了代码。谢谢你的尝试,新的位图(“图像”)到底应该做什么?您没有名为“Image”的文件,参数无效。继续尝试。否则我如何加载图像?