private void btnExtract_Click(object sender, System.EventArgs e)
        {
            Bitmap bitmap = (Bitmap)picImage.Image;

            //empty stream for the extracted message
            Stream messageStream = new MemoryStream();

            //get a stream for the key
            Stream keyStream = GetKeyStream();

            if (keyStream.Length == 0)
            {
                MessageBox.Show("Please enter a password or select a key file.");
                txtKeyText.Focus();
            }
            else
            {
                try{
                    //extract the hidden message from the bitmap
                    CryptUtility.ExtractMessageFromBitmap(bitmap, keyStream, ref messageStream);

                    //save the message, if a filename is available
                    if (txtExtractedMsgFile.Text.Length > 0)
                    {
                        messageStream.Seek(0, SeekOrigin.Begin);
                        FileStream fs            = new FileStream(txtExtractedMsgFile.Text, FileMode.Create);
                        byte[]     streamContent = new Byte[messageStream.Length];
                        messageStream.Read(streamContent, 0, streamContent.Length);
                        fs.Write(streamContent, 0, streamContent.Length);
                    }

                    //display the message - displays chaos, if it's no unicode text
                    messageStream.Seek(0, SeekOrigin.Begin);
                    StreamReader reader        = new StreamReader(messageStream, UnicodeEncoding.Unicode);
                    String       readerContent = reader.ReadToEnd();
                    if (readerContent.Length > txtExtractedMsgText.MaxLength)
                    {
                        readerContent = readerContent.Substring(0, txtExtractedMsgText.MaxLength);
                    }
                    txtExtractedMsgText.Text = readerContent;
                }catch (Exception ex) {
                    MessageBox.Show("Exception:\r\n" + ex.Message);
                }
            }
            //close the streams
            messageStream.Close();
            keyStream.Close();
            bitmap = null;
        }
        private void btnHide_Click(object sender, System.EventArgs e)
        {
            Bitmap bitmap = (Bitmap)picImage.Image;

            //get a stream for the message to hide
            Stream messageStream = GetMessageStream();

            if (messageStream.Length == 0)
            {
                MessageBox.Show("Please enter a message or select a file.");
                txtMessageText.Focus();
            }
            else
            {
                //get a stream fot the key
                Stream keyStream = GetKeyStream();
                if (keyStream.Length == 0)
                {
                    MessageBox.Show("Please enter a password or select a key file.");
                    txtKeyText.Focus();
                }
                else
                {
                    try{
                        //hide the message
                        CryptUtility.HideMessageInBitmap(messageStream, bitmap, keyStream, chkGrayscale.Checked);
                        //display result
                        picImage.Image        = bitmap;
                        btnSaveBitmap.Enabled = true;
                        MessageBox.Show("Hide the message successfull !");
                    }catch (Exception ex) {
                        MessageBox.Show("Exception:\r\n" + ex.Message);
                    }
                }
                keyStream.Close();
            }
            messageStream.Close();
            bitmap = null;
        }