تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
التعامل مع الصور Images في بيئة الدوت نت باستخدام +GDI - الجزء العاشر
#1
كاتب الموضوع : silverlight

التعامل مع الصور Images في بيئة الدوت نت باستخدام +GDI
اللغة المستخدمة: الفيجوال بيسك
التطبيق: فيجوال استوديو 2005 و 2008
المستوي: التقييم متروك للقارئ
إعداد: مهندس / عمر أمين إبراهيم


الجزء العاشر: رسم انعكاس للصورة ٌImage Reflection

يمكن تلخيص عملية رسم إنعاس للصورة في الخطوات التالية
يتم أولا تعريف الصورة الأصلية ثم نقوم بتعريف صورة جديدة أخري بحيث يكون عرض الصورة الجديدة مساويا لعرض الصورة الأصلية و ارتفاع الصورة الجديدة يكون مساويا لارتفاع الصورة الأصلية بالإضافة الي ارتفاع إضافي أخر وهو الي سنرسم به الصورة الأصلية بشكل معكوس وهنا المقصود أننا سنقسم الصورة الجديدة الي مستطيلان مستطيل يمثل الجزء العلوي من الصورة الجديدة ومستطيل أخر يمثل الجزء الأسفل من الصورة الجديدة ثم نقوم برسم الصورة الأصلية بأبعادها الفعلية وبدون تغيير أي من صفاتها في الجزء العلوي من الصورة الجديدة ثم نقوم بعمل دوران للصورة الأصلية وذلك لعكس اتجاها ثم مرة أخري نقوم برسم الصورة الأصلية بعد أن نكون قد عكسنا اتجاهها في منطقة الارتفاع الإضافي من الصورة الجديدة كما يمكننا أيضا أن نرسم أي مؤثرات نريدها طبقا لرغبتنا وفي المثال التالي علي سبيل المثال قمت بتغطية الجزء المعكوس من الصورة بلون شفاف
ولنعطي مثالا علي ذلك
لتنفيذ المثال افتح مشروع جديد وقم بتعريف صورة ثم أضف الي الفورم PictureBox ثم اكتب الكود بالشكل التالي


كود :
Public Class Form1

Dim bmp As New Bitmap(My.Resources.baby_5)

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim scale As Single = 0.75
Dim rh As Integer = bmp.Height * scale

Dim ImageHeight As Integer = CInt(bmp.Height + rh)

Dim bmpRef As New Bitmap(bmp.Width, ImageHeight, bmp.PixelFormat)

bmpRef.SetResolution(bmp.HorizontalResolution, bmp.VerticalResolution)
Dim Clr As Color = Color.FromArgb(100, bmp.GetPixel(0, 0))

Dim rectOrig As New Rectangle(0, 0, bmp.Width, bmp.Height)
Dim rectRef As New Rectangle(0, bmp.Height, bmp.Width, rh)

Dim g As Graphics = Graphics.FromImage(bmpRef)

g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic
g.DrawImage(bmp, New Point(0, 0))

bmp.RotateFlip(RotateFlipType.RotateNoneFlipY)
g.DrawImage(bmp, rectRef)
Dim lgb As New System.Drawing.Drawing2D.LinearGradientBrush(rectRef, Color.FromArgb(150, Clr), Clr, 90, True)
g.FillRectangle(lgb, rectRef)

Dim fbmp As Bitmap = bmpRef.GetThumbnailImage(bmp.Width, bmp.Height, Nothing, Nothing)

PictureBox1.Image = fbmp
PictureBox1.SizeMode = PictureBoxSizeMode.CenterImage

End Sub

End Class
ستلاحظ عزيزي القارئ في بالكود أعلاه أننا قد قمنا بتعريف صورة ثالثة وهي يمثلها المتغير fbmp وباستخدام GetThumbnail جعلنا أبعاد الصورة الجديدة تساوي أبعاد الصورة الأصلية ثم قمنا بعرضها في PictureBox وهنا يمكننا الاستغناء عن استخدام GetThumnail وإلغاء هذا السطر من الكود ونقوم بعرض الصورة bmpRef مباشرة داخل PictureBox بدلا من استخدام الصورة fbmp
وكالمعتاد من الممكن إنشاء الكثير من الدوال من المثال أعلاه و مجموعة الأكواد التالية توضح شكل الدوال التي من الممكن بناؤها


كود :
Public Shared Function ImageReflect(ByVal bitmap As Bitmap) As Bitmap

Dim Clr As Color = Color.FromArgb(100, bitmap.GetPixel(0, 0))

Dim scale As Single = 0.75
Dim rh As Integer = bitmap.Height * scale

Dim ImageHeight As Integer = CInt(bitmap.Height + rh)
Dim bmpRef As New Bitmap(bitmap.Width, ImageHeight, bitmap.PixelFormat)

Dim rectOrig As New Rectangle(0, 0, bitmap.Width, bitmap.Height)
Dim rectRef As New Rectangle(0, bitmap.Height, bitmap.Width, rh)

bmpRef.SetResolution(bitmap.HorizontalResolution, bitmap.VerticalResolution)

Dim g As Graphics = Graphics.FromImage(bmpRef)

g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic
g.DrawImage(bitmap, New Point(0, 0))

bitmap.RotateFlip(RotateFlipType.RotateNoneFlipY)
g.DrawImage(bitmap, rectRef)

Dim lgb As New System.Drawing.Drawing2D.LinearGradientBrush(rectRef, Color.FromArgb(150, Clr), Clr, 90, True)
g.FillRectangle(lgb, rectRef)

Dim bmp As Bitmap = bmpRef.GetThumbnailImage(bitmap.Width, bitmap.Height, Nothing, Nothing)

Return bmp

End Function

Public Shared Function ImageReflect(ByVal bitmap As Bitmap, ByVal Scale As Single) As Bitmap

If Scale < 0.3 OrElse Scale > 1 Then
Throw New ArgumentOutOfRangeException("Scale must be between 0.3 and 1.")
End If

Dim Clr As Color = Color.FromArgb(100, bitmap.GetPixel(0, 0))

Dim rh As Integer = bitmap.Height * Scale

Dim ImageHeight As Integer = CInt(bitmap.Height + rh)
Dim bmpRef As New Bitmap(bitmap.Width, ImageHeight, bitmap.PixelFormat)

Dim rectOrig As New Rectangle(0, 0, bitmap.Width, bitmap.Height)
Dim rectRef As New Rectangle(0, bitmap.Height, bitmap.Width, rh)

bmpRef.SetResolution(bitmap.HorizontalResolution, bitmap.VerticalResolution)

Dim g As Graphics = Graphics.FromImage(bmpRef)

g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic
g.DrawImage(bitmap, New Point(0, 0))

bitmap.RotateFlip(RotateFlipType.RotateNoneFlipY)
g.DrawImage(bitmap, rectRef)

Dim lgb As New System.Drawing.Drawing2D.LinearGradientBrush(rectRef, Color.FromArgb(150, Clr), Clr, 90, True)
g.FillRectangle(lgb, rectRef)

Dim bmp As Bitmap = bmpRef.GetThumbnailImage(bitmap.Width, bitmap.Height, Nothing, Nothing)

Return bmp

End Function

Public Shared Function ImageReflect(ByVal bitmap As Bitmap, ByVal Scale As Single, ByVal color As Color) As Bitmap

If Scale < 0.3 OrElse Scale > 1 Then
Throw New ArgumentOutOfRangeException("Scale must be between 0.3 and 1.")
End If

Dim Clr As Color = color.FromArgb(100, color)

Dim rh As Integer = bitmap.Height * Scale

Dim ImageHeight As Integer = CInt(bitmap.Height + rh)
Dim bmpRef As New Bitmap(bitmap.Width, ImageHeight, bitmap.PixelFormat)

Dim rectOrig As New Rectangle(0, 0, bitmap.Width, bitmap.Height)
Dim rectRef As New Rectangle(0, bitmap.Height, bitmap.Width, rh)

bmpRef.SetResolution(bitmap.HorizontalResolution, bitmap.VerticalResolution)

Dim g As Graphics = Graphics.FromImage(bmpRef)

g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic
g.DrawImage(bitmap, New Point(0, 0))

bitmap.RotateFlip(RotateFlipType.RotateNoneFlipY)
g.DrawImage(bitmap, rectRef)

Dim lgb As New System.Drawing.Drawing2D.LinearGradientBrush(rectRef, Color.FromArgb(150, Clr), Clr, 90, True)
g.FillRectangle(lgb, rectRef)

Dim bmp As Bitmap = bmpRef.GetThumbnailImage(bitmap.Width, bitmap.Height, Nothing, Nothing)

Return bmp

End Function

Public Shared Function ImageReflect(ByVal bitmap As Bitmap, ByVal Scale As Single, ByVal color As Color, ByVal ReflectionHeight As Integer) As Bitmap

If Scale < 0.3 OrElse Scale > 1 Then
Throw New ArgumentOutOfRangeException("Scale must be between 0.3 and 1.")
End If

If ReflectionHeight > bitmap.Height Then
Throw New ArgumentOutOfRangeException("Reflection Height must be less than bitmap height.")
End If

Dim Clr As Color = color.FromArgb(100, color)

Dim rh As Integer = ReflectionHeight * Scale

Dim ImageHeight As Integer = CInt(bitmap.Height + rh)
Dim bmpRef As New Bitmap(bitmap.Width, ImageHeight, bitmap.PixelFormat)

Dim rectOrig As New Rectangle(0, 0, bitmap.Width, bitmap.Height)
Dim rectRef As New Rectangle(0, bitmap.Height, bitmap.Width, rh)

bmpRef.SetResolution(bitmap.HorizontalResolution, bitmap.VerticalResolution)

Dim g As Graphics = Graphics.FromImage(bmpRef)

g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic
g.DrawImage(bitmap, New Point(0, 0))

bitmap.RotateFlip(RotateFlipType.RotateNoneFlipY)
g.DrawImage(bitmap, rectRef)

Dim lgb As New System.Drawing.Drawing2D.LinearGradientBrush(rectRef, color.FromArgb(150, Clr), Clr, 90, True)
g.FillRectangle(lgb, rectRef)

Dim bmp As Bitmap = bmpRef.GetThumbnailImage(bitmap.Width, bitmap.Height, Nothing, Nothing)

Return bmp

End Function
ولنعطي مثالا علي استخدام واحدة من الدوال أعلاه ولتنفيذ المثال افتح مشروع وقم بتعريف صورة ثم أضف PictureBox الي الفورم ثم اكتب الكود بالشكل التالي


كود :
Public Class Form1

Dim bmp As New Bitmap(My.Resources.baby_5)

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim bmpHeight As Integer = bmp.Height

PictureBox1.Image = ImageReflect(bmp, 0.7, Color.Aqua, bmpHeight * 0.8)
PictureBox1.SizeMode = PictureBoxSizeMode.CenterImage

End Sub

Public Shared Function ImageReflect(ByVal bitmap As Bitmap, ByVal Scale As Single, ByVal color As Color, ByVal ReflectionHeight As Integer) As Bitmap

If Scale < 0.3 OrElse Scale > 1 Then
Throw New ArgumentOutOfRangeException("Scale must be between 0.3 and 1.")
End If

If ReflectionHeight > bitmap.Height Then
Throw New ArgumentOutOfRangeException("Reflection Height must be less than bitmap height.")
End If

Dim Clr As Color = color.FromArgb(100, color)

Dim rh As Integer = ReflectionHeight * Scale

Dim ImageHeight As Integer = CInt(bitmap.Height + rh)
Dim bmpRef As New Bitmap(bitmap.Width, ImageHeight, bitmap.PixelFormat)

Dim rectOrig As New Rectangle(0, 0, bitmap.Width, bitmap.Height)
Dim rectRef As New Rectangle(0, bitmap.Height, bitmap.Width, rh)

bmpRef.SetResolution(bitmap.HorizontalResolution, bitmap.VerticalResolution)

Dim g As Graphics = Graphics.FromImage(bmpRef)

g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic
g.DrawImage(bitmap, New Point(0, 0))

bitmap.RotateFlip(RotateFlipType.RotateNoneFlipY)
g.DrawImage(bitmap, rectRef)

Dim lgb As New System.Drawing.Drawing2D.LinearGradientBrush(rectRef, color.FromArgb(150, Clr), Clr, 90, True)
g.FillRectangle(lgb, rectRef)

Dim bmp As Bitmap = bmpRef.GetThumbnailImage(bitmap.Width, bitmap.Height, Nothing, Nothing)

Return bmp

End Function

End Class

بالتوفيق
أخوكم عمر
}}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  اصنع محرر أكواد خاص بك باستخدام الأداة RichTextBox السكر المغرور 9 1,913 أمس, 03:03 PM
آخر رد: farhat ali
  [مقال] دوال التعامل مع النصوص Strings - VB.NET ابو ليلى 7 1,144 13-10-17, 05:39 PM
آخر رد: farhat ali
  مقارنة صورتين و الحصول علي الفرق بينهم Comparing Two Images and Get Diff Image silverlight 0 263 30-06-17, 11:33 AM
آخر رد: silverlight
  تفقيط الارقام فى الدوت نت مبرمج أوتار 17 4,875 20-04-17, 12:21 PM
آخر رد: محمد بوقزاحة
  مشروع لجلب الصور من الماسحة الضوئية (Scanner) m.sami.ak 14 5,238 22-01-17, 10:41 AM
آخر رد: amko
  مقدمة إلي إخفاء المعلومات - الجزء الأول silverlight 5 479 07-01-17, 10:44 PM
آخر رد: Basil Abdallah
  مقدمة إلي إخفاء المعلومات - الجزء الثاني silverlight 1 348 06-01-17, 11:52 AM
آخر رد: silverlight
  التعامل مع الملفات الصوتية ........دردشة برمجية RaggiTech 7 4,155 26-12-16, 02:40 AM
آخر رد: sayed fox
  كيفية قراءة ملف باستخدام IntPtr الخاص بالملف silverlight 3 423 24-12-16, 03:13 AM
آخر رد: silverlight
  التعامل مع جهاز الكمبيوتر من Command Prompt silverlight 7 599 22-12-16, 06:07 PM
آخر رد: silverlight

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم