2009-05-20 14 views
0

https://stackoverflow.com/questions/885696/how-do-i-perform-a-better-colorize-functionより良い色付け機能を実行するにはどうすればよいですか?

の重複私は、私は画像のディテールを失い始める50>ユーザーが色を選択しかしとき、ピクセルを色付けするVB2005で、私はこの問題を解決することができますどのように任意のアイデアを、この機能を使用していますか?

Private badcolor As Color = Color.FromArgb(0, 0, 0, 0) 
    Public Function grayscalePixel(ByVal basecolor As Color) As Color 

     Return grayscalePixel(basecolor, 0.3, 0.59, 0.11) 

    End Function 

    Public Function grayscalePixel(ByVal basecolor As Color, ByVal RedMix As Double, ByVal GreenMix As Double, ByVal BlueMix As Double) As Color 
     If basecolor.A = 0 Then 
      Return badcolor 
     End If 
     If (RedMix + GreenMix + BlueMix > 1) Or (RedMix + GreenMix + BlueMix <= 0) Then 
      Return grayscalePixel(basecolor) 
     End If 

     Dim grayval As Integer = basecolor.R * RedMix + basecolor.G * GreenMix + basecolor.B * BlueMix 

     Return Color.FromArgb(basecolor.A, grayval, grayval, grayval) 
    End Function 
    Public Function colorizePixel(ByVal basecolor As Color, ByVal colorize As Color) As Color 
     If basecolor.A = 0 Then 
      Return badcolor 
     End If 
     Dim grayval As Color = grayscalePixel(basecolor) 

     Dim r As Integer = Convert.ToInt32(grayval.R) + Convert.ToInt32(colorize.R) 
     Dim g As Integer = Convert.ToInt32(grayval.R) + Convert.ToInt32(colorize.G) 
     Dim b As Integer = Convert.ToInt32(grayval.R) + Convert.ToInt32(colorize.B) 

     If r > 255 Then 
      r = 255 
     End If 
     If g > 255 Then 
      g = 255 
     End If 
     If b > 255 Then 
      b = 255 
     End If 
     If r < 0 Then 
      r = 0 
     End If 
     If g < 0 Then 
      g = 0 
     End If 
     If b < 0 Then 
      b = 0 
     End If 

     Return Color.FromArgb(basecolor.A, r, g, b) 
    End Function 

答えて

0

まあ、私は主にC#の男だが、良い式はこのようなものです:

rNew = (grayVal.R/2) + (colorize.R/2) 

それとも、浮動小数点arithmatecを好む場合:

rNew = (0.5F * grayval.R) + (0.5F * colorize.R) 

もう1つは50/50ブレンドに設定された一般的なオーバーレイ機能です。異なる比率を得るために定数を変更することができます。 Option Explicitがオンの場合、grayval.Rとcolorize.Rをfloatにキャストする必要があります。

関連する問題