C# 从另一个窗体返回位图
我有两个表格,表格一处理图像压缩,表格二处理细节。 细节如:;浏览位图、图像质量和保存文件名 我现在遇到的问题是位图正在返回为null的形式1。 然后,这会产生错误C# 从另一个窗体返回位图,c#,winforms,image-processing,bitmap,C#,Winforms,Image Processing,Bitmap,我有两个表格,表格一处理图像压缩,表格二处理细节。 细节如:;浏览位图、图像质量和保存文件名 我现在遇到的问题是位图正在返回为null的形式1。 然后,这会产生错误对象引用未设置为对象的实例 问题出在哪里? 我盯着屏幕看得太久了,另外一双眼睛真的能帮上忙 代码格式1: public void compressImg(Bitmap bitmp, string fileName, int quality) { //string fil
对象引用未设置为对象的实例
问题出在哪里?
我盯着屏幕看得太久了,另外一双眼睛真的能帮上忙
代码格式1:
public void compressImg(Bitmap bitmp, string fileName, int quality)
{
//string fileName = Microsoft.VisualBasic.Interaction.InputBox("Enter a file name:", "Save File", "JPEGCompress", 250, 250);
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
ImageCodecInfo ici = null;
foreach (ImageCodecInfo codec in codecs)
{
if (codec.MimeType == "image/jpeg")
ici = codec;
}
EncoderParameters ep = new EncoderParameters();
ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)quality);
bitmp.Save("C:\\" + fileName + ".jpg", ici, ep);
}
private void compressAnImageToolStripMenuItem_Click(object sender, EventArgs e)
{
string fileName;
int quality;
Bitmap bitmp;
Form2 f2 = new Form2();
f2.ShowDialog();
fileName = f2.getFileName;
quality = f2.getQuality;
bitmp = f2.getBtmap;
//Bitmap newbitmp = new Bitmap(bitmp);
compressImg(bitmp, fileName, quality);
}
代码格式2:
public partial class Form2 : Form
{
public static string fileName;
public static int quality;
public Bitmap bitmp, bitmap1;
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
}
public string getFileName
{
get { return fileName; }
set { fileName = txtFileName.Text; }
}
public int getQuality
{
get { return quality; }
set { quality = imgQualTrkBar.Value; }
}
private void BtnSubmitInfo_Click(object sender, EventArgs e)
{
this.Close();
}
private void button1_Click(object sender, EventArgs e)
{
if (openFileDialog2.ShowDialog() == DialogResult.OK)
{
bitmp = new Bitmap(openFileDialog2.FileName);
}
}
public Bitmap getBtmap
{
get { return bitmap1; }
set { bitmap1 = new Bitmap(bitmp); }
}
}
}
首先,您的错误是因为您正在将
bitmp
对象存储在bitmp
中。。但是从getBtmap
属性返回bitmap1
另外,当属性也有不接受值的set访问器时,您调用了属性getSomething
。这会迷惑你(就像你的变量名一样……也考虑重命名它们)。
考虑这一点:
frm.getFileName = "MY FILE NAME";
…它不存储“我的文件名”。。它存储文本框值。考虑改变这个逻辑。不会出现您没有在窗体2中设置GETBTMAP属性的任何地方,所以BITMAP1总是空的。我不能看到设置BITMAP1的值的任何地方。道歉,整天盯着代码。简单的事情似乎很复杂。谢谢你的帮助。修正了错误。