WPFとVB.NETでカラーピッカーその2、HSVとRGBで色指定のコード後半部分
このコードの記事は
WPFとVB.NETでカラーピッカーその2、HSVとRGBで色指定 ( ガーデニング ) - 午後わてんのブログ - Yahoo!ブログ
http://blogs.yahoo.co.jp/gogowaten/14025927.html
http://blogs.yahoo.co.jp/gogowaten/14025927.html
このコードの前半部分は
WPFとVB.NETでカラーピッカーその2、HSVとRGBで色指定のコード前半部分 - 午後わてんのブログ - Yahoo!ブログ
http://blogs.yahoo.co.jp/gogowaten/14025948.html
http://blogs.yahoo.co.jp/gogowaten/14025948.html
'ここから下はイベント Private Sub MainWindow_Initialized(sender As Object, e As EventArgs) Handles Me.Initialized '色相バー作成 Call AddHueBar() '透明用の市松模様画像作成 Call CreateTransparentImage() 'SVの最大値設定 sldS.Maximum = MaxSV sldV.Maximum = MaxSV '初期SV画像作成、色相は0(赤)で作成 Call ChangeImageSV(0) imgSV.Width = MaxSV + 1 '100%表示なら0から100なので101ピクセル必要、255表示なら256ピクセル必要なので+1 imgSV.Height = MaxSV + 1 canvasSV.Width = imgSV.Width canvasSV.Height = imgSV.Height imgTransparent.Width = MaxSV imgTransparent.Height = MaxSV Call cbTransparent_Click(cbTransparent, New RoutedEventArgs) End Sub Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded AddHandler sldHue.ValueChanged, AddressOf sldHue_ValueChanged AddHandler sldS.ValueChanged, AddressOf sldS_ValueChanged AddHandler sldV.ValueChanged, AddressOf sldV_ValueChanged AddHandler sldA.ValueChanged, AddressOf sldA_ValueChanged AddHandler sldR.ValueChanged, AddressOf sldRGB_ValueChanged AddHandler sldG.ValueChanged, AddressOf sldRGB_ValueChanged AddHandler sldB.ValueChanged, AddressOf sldRGB_ValueChanged '初期値設定 sldHue.Value = 0 sldS.Value = MaxSV sldV.Value = MaxSV sldA.Value = 255 sldR.Value = 255 AddHandler sldHue.MouseWheel, AddressOf Slider_MouseWheel AddHandler sldS.MouseWheel, AddressOf Slider_MouseWheel AddHandler sldV.MouseWheel, AddressOf Slider_MouseWheel AddHandler sldA.MouseWheel, AddressOf Slider_MouseWheel AddHandler sldR.MouseWheel, AddressOf Slider_MouseWheel AddHandler sldG.MouseWheel, AddressOf Slider_MouseWheel AddHandler sldB.MouseWheel, AddressOf Slider_MouseWheel AddHandler tbxH.MouseWheel, AddressOf TextBox_MouseWheel AddHandler tbxS.MouseWheel, AddressOf TextBox_MouseWheel AddHandler tbxV.MouseWheel, AddressOf TextBox_MouseWheel AddHandler tbxA.MouseWheel, AddressOf TextBox_MouseWheel AddHandler tbxR.MouseWheel, AddressOf TextBox_MouseWheel AddHandler tbxG.MouseWheel, AddressOf TextBox_MouseWheel AddHandler tbxB.MouseWheel, AddressOf TextBox_MouseWheel 'ウィンドウの高さ調整 Dim neko = spp.Height neko = spp.ActualHeight Height = neko End Sub Private Sub thumb1_DragCompleted(sender As Object, e As DragCompletedEventArgs) Handles thumb1.DragCompleted IsDrag = False End Sub 'マーカードラッグ移動 Private Sub thumb1_DragDelta(sender As Object, e As DragDeltaEventArgs) Handles thumb1.DragDelta IsDrag = True Dim x As Integer = e.HorizontalChange Dim y As Integer = e.VerticalChange Dim t As Thumb = DirectCast(sender, Thumb) Dim w As Integer = Math.Floor(t.ActualWidth / 2) Dim h As Integer = Math.Floor(t.ActualHeight / 2) Dim nx As Integer = x + Canvas.GetLeft(t) Dim ny As Integer = y + Canvas.GetTop(t) If nx < -w Then nx = -w If nx > MaxSV - w Then nx = MaxSV - w If ny < -h Then ny = -h If ny > MaxSV - h Then ny = MaxSV - h Canvas.SetLeft(t, nx) Canvas.SetTop(t, ny) Dim p As Point = New Point(nx + w, ny + h) 'スライダー移動 sldS.Value = p.X sldV.Value = p.Y End Sub 'スライダー Private Sub sldS_ValueChanged(sender As Object, e As RoutedPropertyChangedEventArgs(Of Double)) If IsChangeRGB Then Return IsChangeHSV = True Call MoveThumb(New Point(e.NewValue, sldV.Value)) Call ValueChangedHSV() IsChangeHSV = False End Sub Private Sub sldV_ValueChanged(sender As Object, e As RoutedPropertyChangedEventArgs(Of Double)) If IsChangeRGB Then Return IsChangeHSV = True Call MoveThumb(New Point(sldS.Value, e.NewValue)) Call ValueChangedHSV() IsChangeHSV = False End Sub '色相スライダー変化でSV画像更新 Private Sub sldHue_ValueChanged(sender As Object, e As RoutedPropertyChangedEventArgs(Of Double)) If IsChangeRGB Then Return IsChangeHSV = True Call ChangeImageSV(e.NewValue) Call ValueChangedHSV() IsChangeHSV = False End Sub 'RGBスライダー Private Sub sldRGB_ValueChanged(sender As Object, e As RoutedPropertyChangedEventArgs(Of Double)) If IsChangeHSV Then Return IsChangeRGB = True Dim hsv As HSV = ChangeHSV() Call MoveThumb(New Point(hsv.S, hsv.V)) Call ChangeImageSV(hsv.H) Call ChangeMihon(Color.FromArgb(sldA.Value, sldR.Value, sldG.Value, sldB.Value)) IsChangeRGB = False End Sub 'アルファスライダー Private Sub sldA_ValueChanged(sender As Object, e As RoutedPropertyChangedEventArgs(Of Double)) Call ChangeMihon(Color.FromArgb(sldA.Value, sldR.Value, sldG.Value, sldB.Value)) End Sub 'SV画像クリック Private Sub imgSV_MouseLeftButtonDown(sender As Object, e As MouseButtonEventArgs) Handles imgSV.MouseLeftButtonDown Dim clickPoint As Point = e.GetPosition(imgSV) 'マーカーを移動 Call MoveThumb(clickPoint) 'スライダー移動 sldS.Value = clickPoint.X sldV.Value = clickPoint.Y End Sub 'マウスホイール、スライダー Private Sub Slider_MouseWheel(sender As Slider, e As MouseWheelEventArgs) If e.Delta > 0 Then sender.Value += 1 Else sender.Value -= 1 End If End Sub 'マウスホイール、textbox Private Sub TextBox_MouseWheel(sender As TextBox, e As MouseWheelEventArgs) If e.Delta > 0 Then sender.Text += 1 Else sender.Text -= 1 End If End Sub '市松模様のオンオフ Private Sub cbTransparent_Click(sender As Object, e As RoutedEventArgs) Handles cbTransparent.Click Dim cb As CheckBox = DirectCast(sender, CheckBox) With imgTransparent If cb.IsChecked Then .Width = rectMihon.Width .Height = rectMihon.Height Else .Width = 0 .Height = 0 End If End With End Sub End Class