تقييم الموضوع :
  • 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

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


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [درس فيديو] تحذير هام في التعامل مع For و Try ali.alfoly 3 119 07-12-16, 12:43 AM
آخر رد: silverlight
Wink [مقال] كفية التعامل مه الجملة الشرطية IF alims 8 3,532 19-11-16, 01:06 AM
آخر رد: LoveVb
  اصنع محرر أكواد خاص بك باستخدام الأداة RichTextBox السكر المغرور 8 1,537 03-09-16, 07:59 PM
آخر رد: tryold
  مشروع لجلب الصور من الماسحة الضوئية (Scanner) m.sami.ak 12 4,043 25-08-16, 09:30 PM
آخر رد: jassim316
  شرح خوارزميات معالجة الصور (من دروس الاستاذ فوزي برزنجي) ناديه الشجيري 14 7,818 09-04-16, 11:26 PM
آخر رد: بديع
  [درس فيديو] تشغيل اوامر Run من البرنامج & مثال غلق الويندوز بعد وقت محدد باستخدام VB.net أحمد النجار 1 543 23-12-15, 04:26 AM
آخر رد: الماجيك مسعد
Big Grin [مقال] كفية التعامل مع حلقة التكرار For , For Each alims 8 3,494 01-11-15, 11:51 PM
آخر رد: adel27
  [VB.NET] تشغيل Twain الخاص بسحب الصور من السكنر في حالة net framework4 ahmed saleh 4 677 25-10-15, 07:20 PM
آخر رد: عدنان الشمري
  Create, Save Tiff Image & Extract Images From TIFF Image silverlight 0 330 09-10-15, 01:40 PM
آخر رد: silverlight
  [VB.NET] التشفير باستخدام خوارزمية rsa alking-0999 10 1,395 08-07-15, 04:24 PM
آخر رد: مبرمج بلا حدود

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


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