BMP灰度图的透明度处理

翻译|其它|编辑:郝浩|2008-06-10 10:35:47.000|阅读 1582 次

概述:

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

通过使用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
标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com

文章转载自:CSDN

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP