C# 从另一个窗体返回位图

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

我有两个表格,表格一处理图像压缩,表格二处理细节。 细节如:;浏览位图、图像质量和保存文件名

我现在遇到的问题是位图正在返回为null的形式1。 然后,这会产生错误
对象引用未设置为对象的实例

问题出在哪里? 我盯着屏幕看得太久了,另外一双眼睛真的能帮上忙

代码格式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的值的任何地方。道歉,整天盯着代码。简单的事情似乎很复杂。谢谢你的帮助。修正了错误。