-1

2つのフォームがあります。1つは画像圧縮を処理し、2つは詳細を処理します。のような詳細; ビットマップ、画質、保存ファイル名を参照します。

私が現在抱えている問題は、ビットマップがnullとしてフォーム1に戻っていることです。これにより、エラーが発生しますObject reference not set to an instance of an object

問題はどこにありますか?私は画面を見つめすぎていたので、もう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); }
        }

    }
}
4

1 に答える 1

1

まず、エラーは、Bitmapオブジェクトを..に格納しているが、プロパティからbitmp戻っているためです。bitmap1getBtmap

getSomethingまた、値を受け入れないアクセサーも設定されている場合は、プロパティを呼び出しました。これはあなたを混乱させます(あなたの変数名もそうです..それらの名前も変更することを検討してください)。

このことを考慮:

frm.getFileName = "MY FILE NAME";

..「MYFILENAME」は保存されません。..テキストボックスの値が保存されます。このロジックを変更することを検討してください。

于 2012-12-17T21:36:36.377 に答える