繁体   English   中英

Picturebox,设置并获取属性以拍摄图像抛出 null C#

[英]Picturebox, set and get property to take an image throwing null C#

我有一个将由OpenFileDialog()填充的图片框,我必须从中渲染直方图(图表)。 我使用getset属性将图像从图片框获取到另一个 class 或表单。 但我总是得到 NullReferenceException。 打开图像文件后,bitmap 似乎没有图像,所以它什么也没返回。 我尝试用图像的完整路径填充 bitmap 参数并且它正在工作,但OpenFileDialog()变得毫无意义。

  1. 点击选项按钮:

    单击选项按钮

  2. 渲染直方图:

    渲染直方图

这是我的代码


MainForm.cs

// button for opening image
private void openImage_Click(object sender, EventArgs e)
    {
        OpenFileDialog img = new OpenFileDialog();
        img.Title = "Open Image File...";
        img.Filter = "Image File (*.bmp, *.jpg, *.jpeg, *.png |*.bmp;*.jpg; *.jpeg;*.png";

        if (img.ShowDialog() == DialogResult.OK) {
            pbInput.Image = new Bitmap(img.FileName);
            // blablabla
        }
    }

    // set and get property
    public Image getImage {
        get { return pbInput.Image; }
        set { pbInput.Image = value; }
    }

OptionsForm.cs

    private void hist1_Click(object sender, EventArgs e)
    {
        h1 = new Histogram();
        h1.FormClosed += (s, a) => hist1.Enabled = true;
        hist1.Enabled = false;
        h1.Show();

    }

直方图.cs

public partial class Histogram : Form
{
    MainForm m = new MainForm();

    public Histogram()
    {
        InitializeComponent();

        Bitmap b = new Bitmap(m.getImage);

        //bla bla bla. . . . . *creating histogram code
    }
 }

我得到的错误信息:

我收到的错误消息

我希望这个问题足够清楚。 谢谢..:PS,英语不是我的主要语言,所以为我的语法道歉。 等等

当你写MainForm m = new MainForm(); 在您的Histogram.cs中,

您创建了一个全新的 object 表单,它没有参考旧表单的图像

您想要的是能够在新表单中访问旧表单的 object 参考,或者更好地在Histogram.cs中获取该 image3 参考

一种方法是将其传递给构造函数

直方图按钮

private void hist1_Click(object sender, EventArgs e)
{
    h1 = new Histogram(this.getImage);
    h1.FormClosed += (s, a) => hist1.Enabled = true;
    hist1.Enabled = false;
    h1.Show();
}

然后是您的直方图形式

public partial class Histogram : Form
{
    public Histogram(Image image)
    {
        Bitmap b = new Bitmap(image);
    }
}

这将为您提供直方图形式的图像。

为什么不直接将图像分配给您的财产?

public Image getImage { get; private set; } // Auto-implemented property.

像这样

if (img.ShowDialog() == DialogResult.OK) {
    getImage = new Bitmap(img.FileName);
    pbInput.Image = getImage;
}

顺便说一句, getImage不是属性的好名字。 GetSomething通常用于方法。 只需调用您的属性Image

public Image Image { get; private set; }

您应该将图像设置为图像属性 getImage = new Bitmap(img.FileName);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM