سلام دوستان در این پست برنامه سی شارپی می نویسیم که متن را در قابل عکسی به ظاهر بی فایده ذخیره کند و سپس ما بتوانیم متن را از آن استخراج کنیم.
ابتدا چنین محیطی طراحی کنید. نام ریچ تکست باکس را rtxt بگذارید.
حال کتابخانه زیر را اضافه کنید کنید.
1 | using System.Drawing.Imaging; |
وارد رویداد کلیک دکمه Save شوید و کد زیر کد زیر را در آن بنویسید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | if (0 < rtxt.TextLength) { int size = 1; //یک طول و عرض مناسب برای عکس پیدا می کند for(int i = 1; i <= rtxt.TextLength; i++) { if(i * i >= rtxt.TextLength) { size = i; break; } } //با طول و عرض انتخاب شده یک عکس خال ایجاد می کند Bitmap result = new Bitmap(size, size); List<int> n = new List<int>(); //هر حرف متن داخل ریچ تکست باکس را به عدد تبدیل می کند و در لیست n می نویسد. foreach (char c in rtxt.Text) { n.Add(Convert.ToInt32(c)); } Random rnd = new Random(); for (int i = 0; i < n.Count; i++) { //با جایگذاری رنگ برای هر پیکسل عکس یک عکس می سازد result.SetPixel(i/size, i % size, Color.FromArgb(n.ToArray()[i], rnd.Next(255), rnd.Next(255))); } SaveFileDialog saveFD = new SaveFileDialog(); saveFD.Filter = "PNG|*.png"; //اگر کاربر مسیری انتخاب کند عکس را با فرمت png ذخیره می کند. if(saveFD.ShowDialog()==DialogResult.OK) result.Save(saveFD.FileName, ImageFormat.Png); } else { MessageBox.Show("Please enter something."); } |
با تغییر ImageFormat.Png در خط 31 می توانید فرمت ذخیره را تغییر دهید.
حال در رویداد کلیک دکمه Load کد زیر را می نویسیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | OpenFileDialog openFD = new OpenFileDialog(); openFD.Filter = "PNG|*.png"; List<char> c = new List<char>(); if(openFD.ShowDialog()==DialogResult.OK) { Bitmap photo = new Bitmap(openFD.FileName); //رنگ هر پیکسل عکس را می خواند و مقدار قرمز آن را به لیست c اضافه می کند for(int i=0;i < photo.Width;i++) { for (int j = 0; j < photo.Height; j++) { Color pcolor = photo.GetPixel(i, j); c.Add(Convert.ToChar(pcolor.R)); } } } string output = ""; //حروف موجود در لیست c را به صورت متن در متغیر output ذخیره می کند foreach(char ch in c.ToArray()) { output += ch; } rtxt.Text = output; |
این طریقه ذخیره و خواندن متن از عکس است.
امیدوارم خوشتان آمده باشد.
تا دیگر پست ها خداحافظ