الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف اعمل تشويش للصورة

بدأه ريماني في 11 أغسطس 2009 · 9 رد · 1,398 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

كيفكن اخواني

اريد مساعده اذا اردت ان اعمل تشويش للصورة بالفيجوال دوت نت في حدا يقدر يساعدني بالطريقه والكود

بحيث اني اختار الصورة واعمل عليها التشويش بحيث ماتظهر معالمها وتخفيها

وبعد ذلك بأمكاني رجوع الصورة الاصليه

فياريت تساعدوني

جزاكن الله خير

#2

أسهل طريقة برأي هي استعمال ما يسمى Random Bit Stream Generator لخلط نقط الصورة عن طريق المعامل XOR و ستكون في هذه الحالة العدد الذي استعمل لتهيئة RBSG هو مفتاح المرور لاسترجاع الصورة الأصلية.

تحياتي...

#3

مشكور اخوي على التواصل والرد

بس اخوي تقر تساعدني اكثر كيف احصل الكود

تحياتي لك

#4

لنعتبر أن الكائن System.Random هو مولد الأعداد العشوائية.

لنعتبر أن الباني الإفتراضي للكائن System.Random.Rando(initValue) في كل مرة مررنا له نفس العدد فإن الدالة System.Random.Next() ستعطينا نفس المتتالية من الأعداد.

لنعتبر أن الدالة Bitmap.GetPixel(xPos, yPos) ترجع لنا لون البيكسل عند النقطة [xPos, yPos] و أن الدالة Bitmap.SetPixel(xPos, yPos, color) تغير لون البيكسيل عند النقطة [xPos, yPos] باللون color.

لنعتبر أننا يمكن أن نفعل ما يلي بالمعامل xor :

		Dim i As Integer
		i = 3 Xor 5 ' 6
		i = i Xor 3 ' 5

		i = 3 Xor 5 ' 6
		i = i Xor 5 ' 3

أنتظر محاولتك بكود يشوش صورة و يعيدها كما كانت.

تحياتي...

#5

هذه أسهل طريقة لتشويش صورة و يمكنني أيضا استعمال كلمة تشفير أيضا. الكود :

		Dim clr As Color
		Dim rnd As New Random(CInt(TextBox1.Text))
		Dim bmp As Bitmap
		bmp = DirectCast(PictureBox1.Image, Bitmap).Clone()
		For x As Integer = 0 To bmp.Width - 1
			For y As Integer = 0 To bmp.Height - 1
				clr = bmp.GetPixel(x, y)
				clr = Color.FromArgb(clr.A, clr.R Xor rnd.Next(0, Byte.MaxValue), clr.G Xor rnd.Next(0, Byte.MaxValue), clr.B Xor rnd.Next(0, Byte.MaxValue))
				bmp.SetPixel(x, y, clr)
			Next
		Next

هذا الكود يقوم باستعراض جميع وحدات البيكسل واحدا واحدا في الصورة ثم يقوم بدمج لون البيكسل مع لون منشئ بطريقة عشوائية باستعمال المعامل xor. استعمال هذا المعامل يمكننا من استعادة الصورة عند القيام بنفس العملية مرة أخرى. لإنشاء لون عشوائي نستعين بخدمات الكلاس Random التي إذا أنشأنا بها كائنا و هيئناه بعدد إكس يعطينا متوالية من الأعدد في كل مرة قمنا بنفس العملية و من هنا يمكننا أن نعتبر أن العدد إكس هو مفتاح التشويش أو التشفير. في الأخير نحصل على صورة لا صلة لها بالصورة الأصلية و لا وجه للتشابه بينهما. ولكن كل من عنده العدد إكس و الخوارزمية البسيطة هذه يمكن له استعادة الصورة الأصلية.

post-207152-1250345904_thumb.jpgpost-207152-1250345972_thumb.jpg

لنبدأ بدراسة الكود :

Dim rnd As New Random(CInt(TextBox1.Text))

مولد الأعداد العشوائية الذي سنستعمله لتشويش و تشفير الصورة. الباني الإفتراضي للكائن Random يستقبل عدد من نوع Int32 حيث سيولد لنا نفس المتتالية من الأعداد كلما هيئناه بنفس القيمة.

		Dim bmp As Bitmap
		 bmp = DirectCast(PictureBox1.Image, Bitmap).Clone()

الحصول على الصورة الأصلية و تحويلها إلى النوع Bitmap الذي سيمكننا من تغيير محتوى الصورة بالمناداة على الدلة GetPixel(x, y)للحصول على لون البيكسل عند النقطة [x, y] و الدالة SetPixel(x, y, color) التي ستمكننا من تحويل لون البيكسل عند النقطة [x, y] باللون color.

		For x As Integer = 0 To bmp.Width - 1
			 For y As Integer = 0 To bmp.Height - 1

استعراض كل وحدات البيكسل في الصورة.

				clr = bmp.GetPixel(x, y)

التعرف على لون البيكسل عند النقطة [x, y].

				clr = Color.FromArgb(clr.A, clr.R Xor rnd.Next(0, Byte.MaxValue), clr.G Xor rnd.Next(0, Byte.MaxValue), clr.B Xor rnd.Next(0, Byte.MaxValue))

عملية تشفير لون البيكسل و ذلك بخلطه مع لون جديد منشئ بطريفة "عشوائية" بالمناداة على الدالة Random.Next(min, max) التي تعيد لنا العدد التالي في المتتالية العشوائية المهيئة بالعدد إكس. هذا العدد يكون محصورا بين العددين min و max.

				bmp.SetPixel(x, y, clr)

و أخيرا نستبدل البيكسل الأصلي بالبيكسل المخلط.

الملف المرفق بهذا الرد به مشروع يستظهر خاصية أسهل طريقة لتشفير الصور و البيانات كذلك.

img_cypher.rar

تم تعديل هذه المشاركة بواسطة محمد رضى في 15 أغسطس 2009 في 17:26

#6

يعطيك الف عافيه راح اطبقها واذا صار اي خلل راح اخبرك

تسلم جعله ربي في ميزان حسناتك

#7

السلام عليكم

أخوي ممكن توضح لي كل كود وين مكانه

لأن يطلع لي الكود not decalariting

آسفه على الازعاج

يعني في button هذا كوده وفي text box هذا كوده

يعطيك الف عافيه وماراح تقصر :)

#8

خلااااص اخوووي ثنكس عرفت الكود بس ممكن تشرح لي كود مفتاح التشويش كل كود ومعناته

#9

الكود سهل و بسيط للغاية فمفتاح التشفير ماهو إلا عدد من نوع Integer يمكن إدخاله عبر مربع نص مفتاح التشويش. عندما ننقر على زر التشويش يقوم الكود بتهيئة مولد الأرقام العشوائية الذي سيعطينا نفس المتوالية من الأعداد إذا قمنا بتهيئته بنفس العدد الذي نأخده من مربع نص مفتاح التشويش.

Dim rnd As New Random(CInt(TextBox1.Text))

تحياتي...

#10

مشكووور اخوي يعطيك الف عافية

مواضيع مشابهة