如何把图片的紫色部分被为透明?

园区宅男 2003-09-05 09:44:09
图片1(大一些)上面有图片2(小一些),图片2覆蓋在图片1上,图片2中有紫色部分,想让紫色部分变为透明,可以看到图片1的内容,怎样实现呢?

最好有简单源代码演示。
...全文
181 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yijiansong 2003-09-09
  • 打赏
  • 举报
回复
学习
Gelim 2003-09-09
  • 打赏
  • 举报
回复
up!
园区宅男 2003-09-09
  • 打赏
  • 举报
回复
up
ShaB 2003-09-08
  • 打赏
  • 举报
回复
透明窗口的处理过程是什么样啊
如果把某种颜色都去掉做为透明,那不是有些本来应该显示但属于透明索引色的颜色也会消失?
thirdapple 2003-09-08
  • 打赏
  • 举报
回复
设置透明需要Alpha Channel,如果简单的应用可以将你的紫色设置为透明色索引,用上面的函数,建议使用BitBlt,Tran..Blt在98下面有内存泄漏问题,我现在在学校,没办法给你自己写透明函数的资料了,抱歉。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
在学校,没办法上网,惨呐惨!
韧恒 2003-09-08
  • 打赏
  • 举报
回复
下面的函数比较有通用性,可以设置任意颜色的透明。

Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, _
ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, _
ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc _
As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Declare Function SetBkColor Lib "gdi32" (ByVal hdc As Long, _
ByVal crColor As Long) As Long
Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc _
As Long) As Long
Declare Function CreateBitmap Lib "gdi32" (ByVal nWidth As Long, _
ByVal nHeight As Long, ByVal nPlanes As Long, ByVal nBitCount _
As Long, lpBits As Any) As Long
Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As _
Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) _
As Long
Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, _
ByVal hObject As Long) As Long

Public Sub TransparentBlt(DstDC As Long, _
SrcDC As Long, ByVal SrcX As Integer, ByVal SrcY As Integer, _
ByVal SrcW As Integer, ByVal SrcH As Integer, DstX As Integer, _
DstY As Integer, TransColor As Long)
' DstDC - Device context into image is actually drawn
' SrcDC - Device context of source to be made transparent in color TransColor
' SrcX, SrcY, SrcW, SrcH - Rectangular region of source bitmap in pixels
' DstX, DstY - Coordinates in OutDstDC where the transparent bitmap must go
' TransColor - Transparent color
Dim nRet As Long
Dim MonoMaskDC As Long, hMonoMask As Long
Dim MonoInvDC As Long, hMonoInv As Long
Dim ResultDstDC As Long, hResultDst As Long
Dim ResultSrcDC As Long, hResultSrc As Long
Dim hPrevMask As Long, hPrevInv As Long
Dim hPrevSrc As Long, hPrevDst As Long
Dim OldBC As Long
Dim OldMode As Integer

' Create monochrome mask and inverse masks
MonoMaskDC = CreateCompatibleDC(DstDC)
MonoInvDC = CreateCompatibleDC(DstDC)
' Create monochrome bitmaps for the mask-related bitmaps:
hMonoMask = CreateBitmap(SrcW, SrcH, 1, 1, ByVal 0&)
hMonoInv = CreateBitmap(SrcW, SrcH, 1, 1, ByVal 0&)
hPrevMask = SelectObject(MonoMaskDC, hMonoMask)
hPrevInv = SelectObject(MonoInvDC, hMonoInv)
' Create keeper DCs and bitmaps
ResultDstDC = CreateCompatibleDC(DstDC)
ResultSrcDC = CreateCompatibleDC(DstDC)
'Create color bitmaps for final result & stored copy of source
hResultDst = CreateCompatibleBitmap(DstDC, SrcW, SrcH)
hResultSrc = CreateCompatibleBitmap(DstDC, SrcW, SrcH)
hPrevDst = SelectObject(ResultDstDC, hResultDst)
hPrevSrc = SelectObject(ResultSrcDC, hResultSrc)
' Copy src to monochrome mask
OldBC = SetBkColor(SrcDC, TransColor)
nRet = BitBlt(MonoMaskDC, 0, 0, SrcW, SrcH, SrcDC, _
SrcX, SrcY, vbSrcCopy)
TransColor = SetBkColor(SrcDC, OldBC)
' Create inverse of mask
nRet = BitBlt(MonoInvDC, 0, 0, SrcW, SrcH, MonoMaskDC, _
0, 0, vbNotSrcCopy)
'Copy background bitmap to result & create final transparent bitmap
nRet = BitBlt(ResultDstDC, 0, 0, SrcW, SrcH, DstDC, _
DstX, DstY, vbSrcCopy)

'AND mask bitmap w/ result DC to punch hole in the background by
'painting black area for non-transparent portion of source bitmap.
nRet = BitBlt(ResultDstDC, 0, 0, SrcW, SrcH, _
MonoMaskDC, 0, 0, vbSrcAnd)
' Get overlapper
nRet = BitBlt(ResultSrcDC, 0, 0, SrcW, SrcH, _
SrcDC, SrcX, SrcY, vbSrcCopy)
'AND inverse mask w/ source bitmap to turn off bits associated
'with transparent area of source bitmap by making it black.
nRet = BitBlt(ResultSrcDC, 0, 0, SrcW, SrcH, _
MonoInvDC, 0, 0, vbSrcAnd)
'XOR result w/ source bitmap to make background show through.
nRet = BitBlt(ResultDstDC, 0, 0, SrcW, SrcH, _
ResultSrcDC, 0, 0, vbSrcInvert)
' Output results
nRet = BitBlt(DstDC, DstX, DstY, SrcW, SrcH, _
ResultDstDC, 0, 0, vbSrcCopy)
' Clean up
hMonoMask = SelectObject(MonoMaskDC, hPrevMask)
DeleteObject hMonoMask
hMonoInv = SelectObject(MonoInvDC, hPrevInv)
DeleteObject hMonoInv
hResultDst = SelectObject(ResultDstDC, hPrevDst)
DeleteObject hResultDst
hResultSrc = SelectObject(ResultSrcDC, hPrevSrc)
DeleteObject hResultSrc
DeleteDC MonoMaskDC
DeleteDC MonoInvDC
DeleteDC ResultDstDC
DeleteDC ResultSrcDC
End Sub
园区宅男 2003-09-08
  • 打赏
  • 举报
回复
up
园区宅男 2003-09-08
  • 打赏
  • 举报
回复
To:ShaB
处理图片时就可以做到让需要透明的颜色(版主中提到的是紫色),做成图片中没有的颜色啊!

To:songyaowu(韧恒)
获取图片的颜色可以做到,但取到这些点之间,如何让它透明?是哪个函数?

7,789

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧