⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 form1.cs

📁 Hiding Text in a Image
💻 CS
📖 第 1 页 / 共 2 页
字号:
			this.btnSaveBitmap.Location = new System.Drawing.Point(280, 328);
			this.btnSaveBitmap.Name = "btnSaveBitmap";
			this.btnSaveBitmap.Size = new System.Drawing.Size(160, 23);
			this.btnSaveBitmap.TabIndex = 3;
			this.btnSaveBitmap.Text = "Save Result";
			this.btnSaveBitmap.Click += new System.EventHandler(this.btnSaveBitmap_Click);
			// 
			// chkGrayscale
			// 
			this.chkGrayscale.Anchor = ((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
				| System.Windows.Forms.AnchorStyles.Right);
			this.chkGrayscale.Checked = true;
			this.chkGrayscale.CheckState = System.Windows.Forms.CheckState.Checked;
			this.chkGrayscale.Location = new System.Drawing.Point(16, 296);
			this.chkGrayscale.Name = "chkGrayscale";
			this.chkGrayscale.Size = new System.Drawing.Size(176, 24);
			this.chkGrayscale.TabIndex = 1;
			this.chkGrayscale.Text = "Produce grayscale noise";
			// 
			// tabPage2
			// 
			this.tabPage2.Controls.AddRange(new System.Windows.Forms.Control[] {
																				   this.groupBox3,
																				   this.btnExtract});
			this.tabPage2.Location = new System.Drawing.Point(4, 25);
			this.tabPage2.Name = "tabPage2";
			this.tabPage2.Size = new System.Drawing.Size(456, 363);
			this.tabPage2.TabIndex = 1;
			this.tabPage2.Text = "Extract";
			// 
			// groupBox3
			// 
			this.groupBox3.Controls.AddRange(new System.Windows.Forms.Control[] {
																					this.label1,
																					this.txtExtractedMsgFile,
																					this.txtExtractedMsgText,
																					this.btnExtractedMsgFile,
																					this.label3});
			this.groupBox3.Location = new System.Drawing.Point(16, 16);
			this.groupBox3.Name = "groupBox3";
			this.groupBox3.Size = new System.Drawing.Size(424, 296);
			this.groupBox3.TabIndex = 0;
			this.groupBox3.TabStop = false;
			this.groupBox3.Text = "Nachricht";
			// 
			// label1
			// 
			this.label1.Location = new System.Drawing.Point(16, 32);
			this.label1.Name = "label1";
			this.label1.Size = new System.Drawing.Size(376, 16);
			this.label1.TabIndex = 10;
			this.label1.Text = "Save Extracted Message to File";
			// 
			// txtExtractedMsgFile
			// 
			this.txtExtractedMsgFile.Location = new System.Drawing.Point(16, 48);
			this.txtExtractedMsgFile.Name = "txtExtractedMsgFile";
			this.txtExtractedMsgFile.Size = new System.Drawing.Size(312, 22);
			this.txtExtractedMsgFile.TabIndex = 0;
			this.txtExtractedMsgFile.Text = "";
			// 
			// txtExtractedMsgText
			// 
			this.txtExtractedMsgText.Location = new System.Drawing.Point(16, 112);
			this.txtExtractedMsgText.Multiline = true;
			this.txtExtractedMsgText.Name = "txtExtractedMsgText";
			this.txtExtractedMsgText.ReadOnly = true;
			this.txtExtractedMsgText.Size = new System.Drawing.Size(392, 176);
			this.txtExtractedMsgText.TabIndex = 5;
			this.txtExtractedMsgText.Text = "";
			// 
			// btnExtractedMsgFile
			// 
			this.btnExtractedMsgFile.Location = new System.Drawing.Point(328, 48);
			this.btnExtractedMsgFile.Name = "btnExtractedMsgFile";
			this.btnExtractedMsgFile.Size = new System.Drawing.Size(80, 23);
			this.btnExtractedMsgFile.TabIndex = 1;
			this.btnExtractedMsgFile.Text = "Browse...";
			this.btnExtractedMsgFile.Click += new System.EventHandler(this.btnExtractedMsgFile_Click);
			// 
			// label3
			// 
			this.label3.Location = new System.Drawing.Point(16, 96);
			this.label3.Name = "label3";
			this.label3.Size = new System.Drawing.Size(376, 16);
			this.label3.TabIndex = 10;
			this.label3.Text = "Extracted UnicodeText";
			// 
			// frmMain
			// 
			this.AutoScaleBaseSize = new System.Drawing.Size(6, 15);
			this.ClientSize = new System.Drawing.Size(984, 431);
			this.Controls.AddRange(new System.Windows.Forms.Control[] {
																		  this.tabControl1,
																		  this.grpPicture,
																		  this.grpKey});
			this.Name = "frmMain";
			this.Text = "Use this on your own risk - for help and bug reports contact picturekey@binary-un" +
				"iverse.net";
			this.grpPicture.ResumeLayout(false);
			this.grpKey.ResumeLayout(false);
			this.tabControl1.ResumeLayout(false);
			this.tabPage1.ResumeLayout(false);
			this.grpMessage.ResumeLayout(false);
			this.tabPage2.ResumeLayout(false);
			this.groupBox3.ResumeLayout(false);
			this.ResumeLayout(false);

		}
		#endregion

		/// <summary>
		/// Der Haupteinstiegspunkt f黵 die Anwendung.
		/// </summary>
		[STAThread]
		static void Main() 
		{
			Application.Run(new frmMain());
		}

		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;
					}catch(Exception ex){
						MessageBox.Show("Exception:\r\n"+ex.Message);
					}
				}
				keyStream.Close();
			}
			messageStream.Close();
			bitmap = null;
		}

		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;
		}

		/// <summary>Creates a stream to read the message from a string or a file</summary>
		/// <returns>FileStream for a message file, or MemoryStream</returns>
		private Stream GetMessageStream(){
			Stream messageStream;
			if(rdoMessageText.Checked){
				byte[] messageBytes = UnicodeEncoding.Unicode.GetBytes(txtMessageText.Text);
				messageStream = new MemoryStream(messageBytes);
			}else{
				messageStream = new FileStream(txtMessageFile.Text, FileMode.Open, FileAccess.Read);
			}
			return messageStream;
		}

		/// <summary>Creates a stream to read the key from a string or a file</summary>
		/// <returns>FileStream for a key file, or MemoryStream for a password</returns>
		private Stream GetKeyStream(){
			Stream keyStream;
			if(rdoKeyText.Checked){
				byte[] keyBytes = UnicodeEncoding.Unicode.GetBytes(txtKeyText.Text);
				keyStream = new MemoryStream(keyBytes);
			}else{
				keyStream = new FileStream(txtKeyFile.Text, FileMode.Open, FileAccess.Read);
			}
			return keyStream;
		}
		
		/// <summary>Opens a bitmap</summary>
		/// <param name="fileName">Path and name of the bitmap file</param>
		private void SetImage(String fileName){
			picImage.Image = new Bitmap(fileName);

			btnHide.Enabled = btnExtract.Enabled = true;
			btnSaveBitmap.Enabled = false;
			
			int index = fileName.LastIndexOf("\\")+1;
			if(index > 0){ fileName = fileName.Substring(index); }
			grpPicture.Text = "Carrier Bitmap ("+fileName+")";
		}
		
		/// <summary>Displays the OpenFile dialog</summary>
		/// <returns>The selected file name, or null</returns>
		private String GetFileName(String filter){
			OpenFileDialog dlg = new OpenFileDialog();
			dlg.Multiselect = false;
			if(filter.Length > 0){ dlg.Filter = filter; }

			if( dlg.ShowDialog(this) != DialogResult.Cancel){
				return dlg.FileName;
			}else{
				return null;
			}
		}

		private void rdoMessage_Click(object sender, System.EventArgs e) {
			txtMessageFile.Enabled = rdoMessageFile.Checked;
			txtMessageText.Enabled = rdoMessageText.Checked;
		}

		private void rdoKey_Click(object sender, System.EventArgs e) {
			txtKeyFile.Enabled = rdoKeyFile.Checked;
			txtKeyText.Enabled = rdoKeyText.Checked;
		}

		private void btnImageFile_Click(object sender, System.EventArgs e) {
			String fileName = GetFileName("Bitmaps (*.bmp)|*.bmp|Tagged Image File Format(*.tif)|*.tif|PNG-24(*.png)|*.png");
			if(fileName != null){
				txtImageFile.Text = fileName;
				SetImage(fileName);
			}
		}

		private void btnSaveBitmap_Click(object sender, System.EventArgs e) {
			SaveFileDialog dlg = new SaveFileDialog();
			dlg.Filter = "Bitmaps (*.bmp)|*.bmp|Tagged Image File Format(*.tif)|*.tif|PNG-24(*.png)|*.png";
			if( dlg.ShowDialog() == DialogResult.OK ){
				
				System.Drawing.Imaging.ImageFormat format = System.Drawing.Imaging.ImageFormat.Bmp;

				if(dlg.FilterIndex == 2){
					format = System.Drawing.Imaging.ImageFormat.Tiff;
				}else if(dlg.FilterIndex == 3){
					format = System.Drawing.Imaging.ImageFormat.Png;
				}
				
				//copy the bitmap
				Image img = new Bitmap(picImage.Image);
				
				//close bitmap file
				this.SuspendLayout();
				picImage.Image.Dispose();
				picImage.Image = null;
				btnSaveBitmap.Enabled = btnHide.Enabled = btnExtract.Enabled = false;
				txtImageFile.Text = String.Empty;
				this.ResumeLayout();

				//save new bitmap
				img.Save(dlg.FileName, format);
			}
		}

		private void txtMessageFile_Enter(object sender, System.EventArgs e) {
			rdoKeyFile.Checked = true;
		}

		private void txtMessageText_Enter(object sender, System.EventArgs e) {
			rdoKeyText.Checked = true;
		}

		private void txtImageFile_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) {
			if(e.KeyCode == Keys.Enter){
				SetImage(txtImageFile.Text);
			}
		}

		private void btnMessage_Click(object sender, System.EventArgs e) {
			String fileName = GetFileName(String.Empty);
			if(fileName != null){
				txtMessageFile.Text = fileName;
				rdoMessageFile.Checked = true;
			}
		}

		private void btnExtractedMsgFile_Click(object sender, System.EventArgs e) {
			SaveFileDialog dlg = new SaveFileDialog();
			if( dlg.ShowDialog() == DialogResult.OK ){
				txtExtractedMsgFile.Text = dlg.FileName;
			}			
		}

		private void btnKeyFile_Click(object sender, System.EventArgs e) {
			String fileName = GetFileName(String.Empty);
			if(fileName != null){
				txtKeyFile.Text = fileName;
				rdoKeyFile.Checked = true;
			}
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -