有这么几百幅图片:背景色一样,前景是条曲线,前景色也一样,请问作如何处理,能使背景不变、前景合并到一起,最终成一副图片?

解决方案 »

  1.   


    1、将图片放到一个PictureBox里面,
    2、逐点判断颜色如果是前景色,则保存该点坐标。
    3、把这些坐标画在新的画布上面
    循环处理以上过程
      

  2.   

    如果你的程序肯定工作在win2000/xp中,事情会简单的多, 直接使用API就行了:
    Private Declare Function TransparentBlt Lib "msimg32.dll" (ByVal hdc 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 nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal crTransparent As Long) As Boolean
    Private Sub Form_Load()
        Picture1.AutoSize = True
        Picture1.ScaleMode = vbPixels
        Picture2.ScaleMode = vbPixels
    End Sub
    Private Sub Picture2_Paint()
        DoEvents
    ' 修改下面函数的最后一个参数为图片的背景色就行了。
        TransparentBlt Picture2.hdc, 0, 0, Picture2.ScaleWidth, Picture2.ScaleHeight, Picture1.hdc, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight, vbWhite
    End Sub
    如果你的程序可能工作在win98中,就不要这么用了,因为这个API函数在win98中有严重的资源泄漏问题,不过你可以自己来写一个函数来代替它:'*******************************************************************
    '   在两个内存句柄间绘制透明图片
    '
    '   参数说明:
    '
    '       DstDC            要绘图的目标句柄
    '       DstX, DstY       在目标句柄中绘图的起点坐标, 即左上角坐标
    '       lWidth, lHeight  要绘图的尺寸
    '       SrcDC            源句柄
    '       SrcX, SrcY       源句柄的起点坐标
    '       TransColor       透明色
    '********************************************************************
    Public Sub TransparentBlt(DstDC As Long, DstX As Long, DstY As Long, ByVal lWidth As Long, ByVal lHeight As Long, SrcDC As Long, ByVal SrcX As Integer, ByVal SrcY As Long, TransColor As Long)
        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
               
        MonoMaskDC = CreateCompatibleDC(DstDC)
        MonoInvDC = CreateCompatibleDC(DstDC)
        hMonoMask = CreateBitmap(lWidth, lHeight, 1, 1, ByVal 0&)
        hMonoInv = CreateBitmap(lWidth, lHeight, 1, 1, ByVal 0&)
        hPrevMask = SelectObject(MonoMaskDC, hMonoMask)
        hPrevInv = SelectObject(MonoInvDC, hMonoInv)    ResultDstDC = CreateCompatibleDC(DstDC)
        ResultSrcDC = CreateCompatibleDC(DstDC)
        hResultDst = CreateCompatibleBitmap(DstDC, lWidth, lHeight)
        hResultSrc = CreateCompatibleBitmap(DstDC, lWidth, lHeight)
        hPrevDst = SelectObject(ResultDstDC, hResultDst)
        hPrevSrc = SelectObject(ResultSrcDC, hResultSrc)
        OldBC = SetBkColor(SrcDC, TransColor)
        nRet = BitBlt(MonoMaskDC, 0, 0, lWidth, lHeight, SrcDC, SrcX, SrcY, vbSrcCopy)
        TransColor = SetBkColor(SrcDC, OldBC)    nRet = BitBlt(MonoInvDC, 0, 0, lWidth, lHeight, MonoMaskDC, 0, 0, vbNotSrcCopy)
        nRet = BitBlt(ResultDstDC, 0, 0, lWidth, lHeight, DstDC, DstX, DstY, vbSrcCopy)    nRet = BitBlt(ResultDstDC, 0, 0, lWidth, lHeight, MonoMaskDC, 0, 0, vbSrcAnd)
        nRet = BitBlt(ResultSrcDC, 0, 0, lWidth, lHeight, SrcDC, SrcX, SrcY, vbSrcCopy)    nRet = BitBlt(ResultSrcDC, 0, 0, lWidth, lHeight, MonoInvDC, 0, 0, vbSrcAnd)    nRet = BitBlt(ResultDstDC, 0, 0, lWidth, lHeight, ResultSrcDC, 0, 0, vbSrcInvert)    nRet = BitBlt(DstDC, DstX, DstY, lWidth, lHeight, ResultDstDC, 0, 0, vbSrcCopy)    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