如何检查文件是否是C ++中的图像类型?

时间:2012-04-19 18:16:42

标签: .net winforms visual-studio-2008 visual-c++ c++-cli

我想在使用之前检查我硬盘中的文件是否为图像。

我正在使用C ++ / Cli

OpenFileDialog^ openFileDialog1 = gcnew OpenFileDialog;
if ( openFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK ) {
     Bitmap^ PreviewImage = gcnew Bitmap(openFileDialog1->FileName); //If File is not an image this will crash.

}

正如我在该行中评论的那样,如果文件不是会产生错误的图像,我该如何检查该文件是否是一张图像?

提前致谢。

3 个答案:

答案 0 :(得分:1)

通过捕获异常。

.Net没有任何TryRead方法会返回false而不是抛出异常。

您可以检查扩展程序,但.png文件也可能是无效图像 (但是,您应该设置Filter以阻止用户首先选择其他文件类型)

答案 1 :(得分:1)

我会在OpenFileDialog中添加一个过滤器,以便用户只能选择图像。

OpenFileDialog^ openFileDialog1 = gcnew OpenFileDialog;
openFileDialog1->Filter = "Image Files(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF" ;

请参阅http://msdn.microsoft.com/en-us/library/system.windows.forms.filedialog.filter.aspx

但是,当您尝试打开文件时仍需要检查错误,因为用户总是可以尝试在对话框的文本框中键入无效的文件名。

  

今天的编程是软件工程师努力的竞赛   建立更大,更好的傻瓜计划,宇宙尝试   产生更大更好的白痴。到目前为止,宇宙正在赢得胜利。

     

Rich Cook

答案 2 :(得分:0)

约定通常规定文件内容由扩展名称描述。如果我是你,我会做一些基本的检查,以确保你只允许.bmp,.jpeg,.jpg,.gif等。另外,如另一个答案所提到的,你应该确保抓住异常,您可以告诉用户那里发生了错误。

您可以这样做:

OpenFileDialog^ openFileDialog1 = gcnew OpenFileDialog;
if ( openFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK ) {
     try
     {
         Bitmap^ PreviewImage = gcnew Bitmap(openFileDialog1->FileName); //If File is not an     image this will crash.
     }
     catch(Exception ^ex)
     {
           //do something with the exception here
     }
}