如何永久显示放置的图像

How to permanently display the placed image

我创建了一个 windows 表单来显示和图像作为徽标。我能够使用以下代码浏览图像并将其显示到 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);
        }
    }

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

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

引用它

然后让我们有一个静态的东西。 在您的表单中,为您的图像实现静态路径..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 也应该存在于文件夹图像中。

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

在Visual Studio中:

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

您的 LogoBox class 需要 属性 来更改将用作徽标的图像。我使用与 PictureBox.Image 相同的函数,但将其命名为 Logo:

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

此代码还不够:下次加载此 LogoBox 时,您希望它加载上次设置的 Logo。最简单的方法是将最后设置的图片保存到文件中,因为这样你就知道如果你的 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,因为那样会再次保存图像,浪费时间。

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