如何永久显示放置的图像

时间:2015-10-08 07:24:35

标签: c# picturebox

我创建了一个窗体,用于显示和图像作为徽标。我能够使用以下代码浏览并向PictureBox显示图像:

private void button1_Click(object sender, EventArgs e)
    {
        OpenFileDialog ofd = new OpenFileDialog();
        ofd.Filter = "jpg (*.jpg)|*.jpg|bmp (*.bmp)|*.bmp|png (*.png)|*.png";

        if (ofd.ShowDialog() == DialogResult.OK && ofd.FileName.Length > 0)
        {
            pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
            pictureBox1.Image = Image.FromFile(ofd.FileName);
        }
    }

我希望每次调用PictureBox时都会显示保存在Form中的已放置图像。为了做到这一点,我需要编写什么代码?

3 个答案:

答案 0 :(得分:4)

在表单的加载事件中,您可以设置图片框的图像。通过转到项目设置,资源选项卡,您可以将图像添加为资源,并使用ProjectNamespace.Resources.NameOfResource引用它。

答案 1 :(得分:1)

然后让我们有一个静态的东西。 在表单中,为您的image..say

实现静态路径
public string prg_form_image
{
    get { return "myimage.jpg"; }
}

public string prg_image_path
{
    get { return this.AppDomain.CurrentDomain.BaseDirectory + "image\\"; }
}

private string myImage
{
    get
    {
        return File.Exists(prg_image_path + prg_form_image)
            ? prg_image_path + prg_form_image
            : prg_image_path + "default.jpg";
    }
}

public Image img
{
    get { return Image.FromFile(prg_image_path + prg_form_image); }
}

private void SetImage()
{
    pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
    pictureBox1.Image = img;
}

private void Form_Load(object sender, EventArgs e)
{
    SetImage();
}

private void button1_Click(object sender, EventArgs e)
{
    OpenFileDialog ofd = new OpenFileDialog();
    ofd.Filter = "jpg (*.jpg)|*.jpg|bmp (*.bmp)|*.bmp|png (*.png)|*.png";

    if (ofd.ShowDialog() == DialogResult.OK && ofd.FileName.Length > 0)
    {
        if(File.Exists(prg_image_path + prg_form_image))
        {
            File.Delete(prg_image_path + prg_form_image);
        }

        if(!Directory.Exists(prg_image_path)) { Directory.Create(prg_image_path); }
        Image imgIn = Image.FromFile(ofd.FileName);
        imgIn.SaveAs(prg_image_path + prg_form_image);

        SetImage();
    }
}

注意:文件夹名称图像应存在于可执行程序的旁边。 default.jpg也应该存在于文件夹图像中。

答案 2 :(得分:1)

您需要一种特殊的图片框来显示徽标。我们称之为LogoBox。如果您将其设置为用户控件,则可以使用Visual Studio Toolbox将其添加到控件中。

在Visual Studio中:

  • 打开要使用LogoBox的项目,或将其放在DLL中,以便可以使用多个可执行文件。
  • 菜单:项目 - 添加用户控件,将其命名为LogoBox
  • 使用工具箱将PictureBox添加到用户控件。
  • 将图片框的Dock样式更改为DockStyle.Fill
  • 使用属性为Load事件添加事件处理程序,我们称之为OnLoad。

您的LogoBox类需要一个属性来更改将用作徽标的图像。我使用与PictureBox.Image相同的功能,但称之为Logo:

[BindableAttribute(true)]
public Image Logo
{
    get {return this.pictureBox1.Image;}
    set
    {
        this.pictureBox1.Image = image;
    }
}

此代码是不够的:下次加载此LogoBox时,您希望它加载其最后设置的徽标。最常用的方法是将最后一组图像保存在文件中,因为您知道如果LogoBox的用户在设置后删除原始图像,您仍然拥有自己保存的副本。

  • 您需要文件的文件名。用户项目属性 - 用于创建文件名的设置。
  • 使其成为具有应用范围的字符串属性(它永远不会改变)
  • 名称:LogoFileName
  • 价值:想想好事。 Logo.Img?

[BindableAttribute(true)]
public Image Logo
{
    get {return this.pictureBox1.Image;}
    set
    {
        this.pictureBox1.Image = image;
        image.Save(Properties.Settings.Default.LogoFileName)
    }
}

最后在加载LogoBox时加载图像:

private void OnFormLoading(object sender, EventArgs e)
{
    var img = Image.FromFile(Properties.Settings.Default.LogoFileName);
    this.pictureBox1.Image = img;
}

不要使用this.Logo = img,因为这会再次保存图像,这是浪费时间。

如果徽标文件不存在,唯一要做的就是错误处理。