欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

DSAPI 3张图片实现花开动画

程序员文章站 2022-03-20 08:58:25
效果图 素材 代码 原理: 1 缩放黑影大小,并绘制到和花图一样的图片上 2 使用黑影图作为花图的透明度遮罩,有黑影的地方不透明,其他地方透明 3 将花图绘制到灰白的花上 ......

效果图

DSAPI 3张图片实现花开动画

素材

DSAPI 3张图片实现花开动画DSAPI 3张图片实现花开动画DSAPI 3张图片实现花开动画

代码

 dim b0, b1, b3 as bitmap
    private b as bitmap = nothing
    private sub loading_load(sender as object, e as eventargs) handles mybase.load
        b0 = my.resources.p0.clone
        b1 = my.resources.p1.clone
        b3 = my.resources.p3.clone
        me.show()
    end sub

    private sub play()
        for i as single = 0.1 to 1.5 step 0.02
            if me.disposing then exit sub
            makebg(i)
            threading.thread.sleep(10)
            application.doevents()
        next
        makebg(1.5)
        threading.thread.sleep(2000)
        for i as single = 255 to 0 step -1
            if me.disposing then exit sub
            dsapi.控件.form窗体.透明窗体样式显示图像(me, b, i)
            application.doevents()
        next
    end sub
    private sub makebg(db as single)
        try
            if b isnot nothing then b.dispose()
            b = nothing
            if db < 1.5 then
                b = b0.clone
                using g as graphics = graphics.fromimage(b)
                    g.clip = new region(new rectangle(0, 0, 625, 656))
                    dim _b1 as bitmap = new bitmap(625, 656)
                    using g2 as graphics = graphics.fromimage(_b1)
                        g2.clip = new region(new rectanglef(0, 0, 625, 656))
                        dim w, h as integer
                        dim _b as bitmap = makeimg(db)
                        w = (625 - _b.width) / 2
                        h = (656 - _b.height) / 2
                        g2.drawimage(_b, new rectangle(w, h, _b.width, _b.height), new rectangle(0, 0, _b.width, _b.height), graphicsunit.pixel)
                        _b.dispose()
                    end using
                    dim _b3 as bitmap = b1.clone
                    dsapi.图形图像.应用透明度遮罩(_b3, _b1)
                    _b1.dispose()
                    g.drawimage(_b3, new rectangle(0, 0, 625, 656), new rectangle(0, 0, 625, 656), graphicsunit.pixel)
                end using
            else
                b = b1.clone
            end if
            dsapi.控件.form窗体.透明窗体样式显示图像(me, b, 255)
        catch
        end try
    end sub

    private sub loading_shown(sender as object, e as eventargs) handles me.shown
        for i as single = 0 to 255
            dsapi.控件.form窗体.透明窗体样式显示图像(me, b0, i)
            application.doevents()
            if me.opacity = 0 then me.opacity = 1
        next
        play()
        me.close()
    end sub

    private function makeimg(db as single) as bitmap
        try
            dim w, h as integer
            w = 410 * db
            h = 431 * db
            dim bb as new bitmap(w, h)
            using g as graphics = graphics.fromimage(bb)
                g.clip = new region(new rectangle(0, 0, w, h))
                g.drawimage(b3, new rectangle(0, 0, w, h), new rectangle(0, 0, 410, 431), graphicsunit.pixel)
            end using
            return bb
        catch
            return nothing
        end try
    end function

  原理:

1 缩放黑影大小,并绘制到和花图一样的图片上

2 使用黑影图作为花图的透明度遮罩,有黑影的地方不透明,其他地方透明

3 将花图绘制到灰白的花上