【问题标题】:c# how to show image in picturebox if file format is .jpgc#如果文件格式为.jpg,如何在picturebox中显示图像
【发布时间】:2016-12-23 20:49:04
【问题描述】:

我有问题。我想将图像文件或 rar/zip 加载到我的 WPF。当我单击 WPF 上的按钮打开文件对话框时,出现了一些错误。

这是我打开文件对话框的代码。

private void button1_Click(object sender, EventArgs e)
{
    try
    {
        op.Title = "Select a File";
        op.Filter = "All supported graphics|*.jpg;*.jpeg;*.png|" +
                    "JPEG (*.jpg;*.jpeg)|*.jpg;*.jpeg|" +
                    "Portable Network Graphic (*.png)|*.png"+
                    "Zip Files|*.zip;*.rar";

        if (op.ShowDialog() == DialogResult.OK)
        {
                pictureBox1.Image = System.Drawing.Image.FromFile(op.FileName);
                _path = op.FileName;
                pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

我的问题是如果文件格式是 .jpg / .png 如何显示图像,如果文件格式是 .rar / .zip 在图片框中显示 rar 图标或任何图标。

【问题讨论】:

  • 题目和你提问的内容有什么关系?!
  • 这闻起来像 WinForms。
  • 对不起。我的错。我已经修复了标题。
  • 什么是错误信息?以及如何定义 op 对象?
  • PictureBox 如何打开 zip 文件?那不是图片。

标签: c# winforms syntax-error picturebox openfiledialog


【解决方案1】:

您似乎正在尝试获取文件图标。为此,请使用 ExtractAssociatedIcon,如下所示:

var icon = System.Drawing.Icon.ExtractAssociatedIcon(filename);
pictureBox1.Image = icon.ToBitmap();

【讨论】:

  • 我的意思是,如果是图像文件,则显示我选择的图像,如果是 rar / zip,则在图片框上显示图标 / png / 或类似内容。
  • 然后使用我与您一起显示的代码。检查文件扩展名和设备使用哪个代码。
  • 我已经解决了。问题出在“op.Filter”中。现在我有另一个问题。当我打开 .rar 文件时,messegebox 显示“内存不足”。有什么解决办法吗?
  • 这是一个完全不同的问题。
  • 苏,有什么解决办法吗?
【解决方案2】:

如果我没有理解错,您的问题的解决方案如下面的代码;

首先,当用户选择ziprar 文件时,您应该选择在图片框中显示的通用图片。然后将选中的图片(ex: rar.jpg)放在应用的 **bin\debug** 文件夹下。

然后,使用下面的代码;

        try
        {

            op.Title = "Select a File";
            op.Filter = "All Graphics Types|*.bmp;*.jpg;*.jpeg;*.png;*.tif;*.tiff|"
   + "BMP|*.bmp|GIF|*.gif|JPG|*.jpg;*.jpeg|PNG|*.png|TIFF|*.tif;*.tiff|"
   + "Zip Files|*.zip;*.rar";

            if (op.ShowDialog() == DialogResult.OK)
            {
                string x = op.FileName.ToString();
                char[] ayrac = { '.' };
                string[] kelimeler = x.Split(ayrac);
                string y = kelimeler[1].ToString();

                if (y != "zip" && y != "rar")
                {
                    pictureBox1.Image = System.Drawing.Image.FromFile(op.FileName);
                    _path = op.FileName;
                    pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
                }
                else
                {
                    //How to get picture: The best way is to put the subfolder under the app's bin\debug\,thus you can simply coding:
                    pictureBox1.Image = Image.FromFile(@"rar.jpg", true);
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

我希望代码可以解决您的问题。

【讨论】:

  • 没问题。也谢谢你。
【解决方案3】:

也许你想要的只是一个检查文件结尾的简单 if 语句,如下所示:

using System.IO;

if (Path.GetExtension(op.FileName).EndsWith("rar")
    || Path.GetExtension(op.FileName).EndsWith("zip"))
{
    // File has rar or zip extension
    // Load default image from resources
} 
else
{
    // Load provided image
}

如果你想让它不区分大小写,你甚至可以将StringComparison.InvariantCultureIgnoreCase 添加到EndsWith 调用中。

【讨论】:

  • 是的。我想要一个简单的 if 语句,但我是新来的。顺便说一句,你的答案。我很感激。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-06
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
相关资源
最近更新 更多