0
두 가지 색상을 사용하고 혼합 된 버전을 반환하는 함수가 필요합니다. GDI와 같은 방식으로 혼합해야합니다. Microsoft는이를 사용하여 R, G 및 B 값을 계산하는 것을 말한다 어디도 this page을 발견GDI 알파 색상은 어떻게 혼합됩니까?
Private Function blend(alphaBelow As Single, alphaAbove As Single) As Single
Return alphaBelow + (1.0 - alphaBelow) * alphaAbove
End Function
:
나는 GDI 두 ARGB 색상을 혼합 할 때 당신이 얻을 알파 값은 다음과 같이 계산된다 생각 화학식 :displayColor = sourceColor × 알파/255 +의 backgroundColor × (255 - 알파)/255
그러나 나는 그 동작하지 않습니다 : 당신이 볼 수 있듯이
Color1: A=164, R=111, G=78, B=129
Color2: A=241, R=152, G=22, B=48
Blended in GDI: A=250, R=150, G=24, B=50
R:
150 = 152 * x/255 + 111 * (255 - x)/255
x = 9945/41 = 242.5609756097560975609756097561
G:
24 = 22 * x/255 + 78 * (255 - x)/255
x = 6885/28 = 245.89285714285714285714285714286
B:
50 = 48 * x/255 + 129 * (255 - x)/255
x = 6715/27 = 248.7037037037037037037037037037
, 나는 R, G, B 값의 각각에 대해 서로 다른 알파 값을 얻는다. 이 숫자는 어떻게 계산됩니까?
편집 :
COLOR1 및 COLOR2 내가 함께 혼합 할 그냥 무작위 ARGB 색상입니다. "Blended in GDI"는 서로를 비트 맵으로 그리면 얻을 수 있습니다.
GDI와 색상을 혼합 코드 : 나는 내 문제를 해결 검색의 시간 후
Dim B As New Bitmap(Width, Height, Imaging.PixelFormat.Format32bppPArgb)
Dim G = Graphics.FromImage(B)
Dim w = B.Width - 1, h = B.Height - 1
G.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
Dim pth As New Drawing2D.GraphicsPath
pth.AddRectangle(New Rectangle(0, 0, w, h))
Dim c1 = RandomColor(), c2 = RandomColor()
G.FillPath(New SolidBrush(c1), pth)
G.FillPath(New SolidBrush(c2), pth)
Dim resoult As Color = B.GetPixel(w/2, h/2)
첫 번째 표에서 숫자를 얻은 방법을 정확하게 설명 할 수 있습니까? –
Color1과 Color2는 혼합하려는 임의의 임의의 ARGB 색상입니다. "Blended in GDI"는 비트 맵에서 서로 위에 그릴 때 얻는 것입니다. – BlackCap
당신은 정확히 어떻게 서로의 위에 그렸습니다. 일부 코드는 귀하가 말하는 것에 대해 정확히 알고 있음을 보증합니다. –