تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
مقال- أفكار في الدوت نت Image To ColorPicker
#3
الكود الخاص بالكونترول كاملا


كود :
Imports System.Windows.Forms
Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports System.ComponentModel

<DefaultEvent("SelectedColorChanged")> _
Public Class ImageColorPicker
Inherits Control

#Region " Fields "

Private imageBorders As Integer = 5
Private colorSelected As Color = Color.Empty
Private selectedPoint As Point = New Point(-1, -1)
Private pickerImage As Bitmap = Nothing
Private internalImage As Bitmap = Nothing

#End Region

#Region " Constructor "

Public Sub New()
SetStyle(ControlStyles.SupportsTransparentBackColor, True)
SetStyle(ControlStyles.Opaque, False)
SetStyle(ControlStyles.DoubleBuffer, True)
SetStyle(ControlStyles.AllPaintingInWmPaint, True)
SetStyle(ControlStyles.UserPaint, True)
UpdateStyles()
End Sub

#End Region

#Region " Properties "

Public Property SelectedColor() As Color
Get
Return Me.colorSelected
End Get
Set(ByVal value As Color)
Me.colorSelected = value
Dim w As Integer = MyBase.Width - (2 * Me.imageBorders)
Dim h As Integer = MyBase.Height - (2 * Me.imageBorders)
Me.selectedPoint.X = ((255 - Me.SelectedColor.GetBrightness()) * w) / 255
Me.selectedPoint.Y = ((255 - Me.SelectedColor.GetSaturation) * h) / 255
Me.DrawPickerImage()
MyBase.Invalidate()
End Set
End Property

Public Property Image As Bitmap
Get
Return Me.pickerImage
End Get
Set(ByVal value As Bitmap)
Me.pickerImage = value
Me.DrawPickerImage()
Me.Invalidate()
End Set
End Property

Protected Overrides ReadOnly Property DefaultSize As System.Drawing.Size
Get
Return New Size(100, 100)
End Get
End Property

#End Region

#Region " Methods "

Private Sub CheckColorPoint(ByRef pt As Point)
If (pt.X - Me.imageBorders) < 0 Then
pt.X = Me.imageBorders
End If
If pt.X > ((MyBase.Width - Me.imageBorders) - 1) Then
pt.X = (MyBase.Width - Me.imageBorders) - 1
End If
If (pt.Y - Me.imageBorders) < 0 Then
pt.Y = Me.imageBorders
End If
If pt.Y > ((MyBase.Height - Me.imageBorders) - 1) Then
pt.Y = (MyBase.Height - Me.imageBorders) - 1
End If
End Sub

Private Function IsColorFromPoint(ByVal pt As Point) As Boolean
Me.CheckColorPoint(pt)
If Me.pickerImage IsNot Nothing Then
If (((pt.X - Me.imageBorders) >= 0) AndAlso ((pt.X - Me.imageBorders) < Me.internalImage.Width)) AndAlso (((pt.Y - Me.imageBorders) >= 0) AndAlso ((pt.Y - Me.imageBorders) < Me.internalImage.Height)) Then
Dim pixelColor As Color = Me.internalImage.GetPixel(pt.X - Me.imageBorders, pt.Y - Me.imageBorders)
If pixelColor.A > 0 Then
Me.colorSelected = pixelColor
Me.selectedPoint.X = pt.X - Me.imageBorders
Me.selectedPoint.Y = pt.Y - Me.imageBorders
Return True
End If
End If
End If
Return False
End Function

Protected Sub onSelectedcolorchanged(ByVal e As EventArgs)
Dim handler As EventHandler = CType(Me.Events("SelectedColorChangedEvent"), EventHandler)
If handler IsNot Nothing Then
handler.Invoke(Me, e)
End If
End Sub

Private Sub DrawPickerImage()
If MyBase.Width > 0 AndAlso Me.pickerImage IsNot Nothing Then
Me.internalImage = New Bitmap(MyBase.Width - (Me.imageBorders * 2), MyBase.Height - (Me.imageBorders * 2))
Dim g As Graphics = Graphics.FromImage(Me.internalImage)
Dim mode As SmoothingMode = g.SmoothingMode
g.SmoothingMode = SmoothingMode.AntiAlias
Dim rect As New Rectangle(0, 0, Me.internalImage.Width, Me.internalImage.Height)
g.DrawImage(pickerImage, rect)
g.SmoothingMode = mode
g.Dispose()
End If
End Sub

Protected Overrides Sub OnMouseDown(ByVal e As System.Windows.Forms.MouseEventArgs)
MyBase.OnMouseDown(e)
If Me.IsColorFromPoint(e.Location) Then
If Not Me.Focused Then
MyBase.Focus()
End If
MyBase.Invalidate()
Me.onSelectedcolorchanged(New EventArgs())
End If
End Sub

Protected Overrides Sub OnMouseMove(ByVal e As System.Windows.Forms.MouseEventArgs)
MyBase.OnMouseMove(e)
If (e.Button = MouseButtons.Left) AndAlso Me.IsColorFromPoint(e.Location) Then
MyBase.Invalidate()
Me.onSelectedcolorchanged(New EventArgs())
End If
End Sub

Protected Overrides Sub OnEnter(ByVal e As System.EventArgs)
MyBase.OnEnter(e)
MyBase.Invalidate()
End Sub

Protected Overrides Sub OnLeave(ByVal e As System.EventArgs)
MyBase.OnLeave(e)
MyBase.Invalidate()
End Sub

Protected Overrides Sub OnSizeChanged(ByVal e As System.EventArgs)
Me.DrawPickerImage()
MyBase.OnSizeChanged(e)
End Sub

Protected Overrides Sub OnResize(ByVal e As System.EventArgs)
Me.DrawPickerImage()
MyBase.OnResize(e)
End Sub

Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
MyBase.OnPaint(e)

Dim mode As SmoothingMode = e.Graphics.SmoothingMode
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias
If Me.internalImage IsNot Nothing Then
Using lgb As New LinearGradientBrush(Me.ClientRectangle, Color.Black, Color.FromArgb(200, Color.Black), 90, False)
e.Graphics.FillRectangle(lgb, Me.ClientRectangle)
End Using
e.Graphics.DrawImage(Me.internalImage, Me.imageBorders, Me.imageBorders)
End If

If Me.selectedPoint.X > -1 Then
Dim r As New Rectangle((Me.imageBorders + Me.selectedPoint.X) - 5, (Me.imageBorders + Me.selectedPoint.Y) - 5, 10, 10)
Using sb As Brush = New SolidBrush(Me.colorSelected)
e.Graphics.FillEllipse(sb, r)
End Using
e.Graphics.DrawEllipse(Pens.White, r)
r.Inflate(1, 1)
e.Graphics.DrawEllipse(Pens.Black, r)
End If

e.Graphics.SmoothingMode = mode
End Sub

#End Region

#Region " Events "

Public Custom Event SelectedColorChanged As EventHandler
AddHandler(ByVal value As EventHandler)
Me.Events.AddHandler("SelectedColorChangedEvent", value)
End AddHandler

RemoveHandler(ByVal value As EventHandler)
Me.Events.RemoveHandler("SelectedColorChangedEvent", value)
End RemoveHandler

RaiseEvent(ByVal sender As Object, ByVal e As System.EventArgs)
CType(Me.Events("SelectedColorChangedEvent"), EventHandler).Invoke(sender, e)
End RaiseEvent
End Event

#End Region

End Class ' ImageColorPicker
}}}
تم الشكر بواسطة:


الردود في هذا الموضوع
مقال- أفكار في الدوت نت Image To ColorPicker - بواسطة Raggi Tech - 05-10-12, 06:47 PM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  التعامل مع الصور Images في بيئة الدوت نت باستخدام +GDI - مقدمة RaggiTech 3 6,342 30-07-21, 05:14 PM
آخر رد: kebboud
  مقال: الكومبو بوكس ComboBox كيف تضيف أيقونات Blue Sky 1 3,454 30-06-19, 10:41 AM
آخر رد: invocker
  التــعامل مع cmd من خلال الدوت نت مبتدئ في الاحتراف 3 4,041 02-06-18, 12:36 AM
آخر رد: YousefOkasha
  [VB.NET] ارجو المساعدة : How to Split an Image into Chunks amna jamal 2 2,397 23-01-18, 05:05 AM
آخر رد: silverlight
  أفكار في الجرافكس AlignRectangle silverlight 0 1,716 14-10-17, 02:02 PM
آخر رد: silverlight
  مقارنة صورتين و الحصول علي الفرق بينهم Comparing Two Images and Get Diff Image silverlight 0 5,367 30-06-17, 11:33 AM
آخر رد: silverlight
  تفقيط الارقام فى الدوت نت مبرمج أوتار 17 13,419 20-04-17, 12:21 PM
آخر رد: محمد بوقزاحة
  Create, Save Tiff Image & Extract Images From TIFF Image silverlight 0 2,848 09-10-15, 01:40 PM
آخر رد: silverlight
  [مقال] Check the file format of an Image silverlight 3 3,743 28-05-14, 05:02 PM
آخر رد: Sajad
  [مقال] تشغيل برمجيات الدوت نت بدون تنصيب النت فروم ويرك m0075 13 11,129 13-02-14, 08:29 PM
آخر رد: Omar Mekkawy

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


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