您的位置:资讯频道 > 技术文档 > 其 它

BMP灰度图的透明度处理

来源:CSDN   作者:钟琼晖   时间:2008-06-10  点击:243 次
通过使用Photoshop试验,得到bmp灰度图的透明度的处理原理如下。
Alpha值从0~100,某点的RGB值分别为R,G,B,让该点的alpha值为50的话,该点新的RGB值计算方法如下:
R(new)=R(old)+ (255-R(old))*(1-0.5)

如果alpha值为20公式为:

R(new)=R(old)+ (255-R(old))*(1-0.2)

以此类推。其中R(new)为新的R值,R(old)为旧的R值。G,B值的计算和R值的计算一样。

VB代码实现:

Function Alpha(SrcBox As PictureBox, DestBox As PictureBox, L As Line, fParam As Long) As Long '透明度
'Declare Area
'注意:有时候RGB值可能是负的

'fParam为alpha值
Dim tColor As Long
Dim X, Y As Long
Dim pHeight, pWidth As Long
Dim gray As Long
Dim R, G, B As Long
'---------------------
'Code Area
R = G = B = 0
pHeight = SrcBox.ScaleHeight
pWidth = SrcBox.ScaleWidth

L.X1 = 0
L.X2 = pWidth
For Y = 0 To pHeight
For X = 0 To pWidth

tColor = GetPixel(SrcBox.hdc, X, Y)

R = tColor Mod 256
G = ((tColor -R)/ 256) Mod 256
B = (tColor-256*G-R) / 65536
m = (255 - R) * (1 - (fParam / 100))
n = (255 - G) * (1 - (fParam / 100))
o = (255 - B) * (1 - (fParam / 100))

SetPixel DestBox.hdc, X, Y, RGB(R + m, G + n, B + o)

Next X
DoEvents
L.Y1 = Y + 5
L.Y2 = Y + 5
DestBox.Refresh
Next Y
L.Y1 = pHeight + 5
L.Y2 = pHeight + 5
DestBox.Refresh
Alpha = 0
End Function