[英]Picturebox, set and get property to take an image throwing null C#
我有一个将由OpenFileDialog()
填充的图片框,我必须从中渲染直方图(图表)。 我使用get
和set
属性将图像从图片框获取到另一个 class 或表单。 但我总是得到 NullReferenceException。 打开图像文件后,bitmap 似乎没有图像,所以它什么也没返回。 我尝试用图像的完整路径填充 bitmap 参数并且它正在工作,但OpenFileDialog()
变得毫无意义。
这是我的代码
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.