关于Csdn网友wuganxiu的问题

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。

问题描述:

画40000个正方形,填充颜色,让它们的颜色从黑色(0,0,0)逐渐变化到白色(255,255,255),这个过程总共变化256次

写了几种解决方法,似乎处理任然很慢:

方法1:wuganxiu的原代码

    Dim x(0 To 199) As Integer
    Dim y(0 To 199) As Integer
    Dim R1 = 255
    Dim G1 = 255
    Dim B1 = 255
    Dim bgimage As Bitmap '将这个位图对象关联到图片框的Image属性 
    Dim bggriphic As Graphics '以后绘图时,只需要在这个位图对象上绘制即可,图片框会自动重绘的 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim time_start As DateTime = Now

        Dim i, j, i2 As Integer
        bgimage = New Bitmap(PictureBox1.Width, PictureBox1.Height) '创建相同大小的内存位图 
        bggriphic = Graphics.FromImage(bgimage)
        PictureBox1.Image = bgimage
        TextBox1.Text = ""
        For i = 0 To 199
            x(i) = i * 12
            y(i) = i * 12
        Next
        For i2 = 0 To 255
            R1 = i2
            G1 = i2
            B1 = i2
            For i = 0 To 199
                For j = 0 To 199
                    Dim MyBrush1 As New SolidBrush(Color.FromArgb(R1, G1, B1))
                    bggriphic.FillRectangle(MyBrush1, x(i), y(j), 10, 10)
                Next
            Next
            PictureBox1.Refresh()
        Next

        Dim time_end As DateTime = Now
        Dim tspan As New TimeSpan()
        tspan = time_end - time_start

        TextBox1.Text = tspan.TotalMilliseconds.ToString
    End Sub

方法2:

Imports System.Drawing.Imaging
 Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Dim time_start As DateTime = Now


        Dim i, j As Integer
        Dim sourceImg As Bitmap

        sourceImg = New Bitmap(PictureBox1.Width, PictureBox1.Height) '创建相同大小的内存位图 
        bggriphic = Graphics.FromImage(sourceImg)

        TextBox1.Text = ""
        For i = 0 To 199
            x(i) = i * 12
            y(i) = i * 12
        Next
        R1 = 255
        G1 = 255
        B1 = 255
        For i = 0 To 199
            For j = 0 To 199
                Dim MyBrush1 As New SolidBrush(Color.FromArgb(R1, G1, B1))
                bggriphic.FillRectangle(MyBrush1, x(i), y(j), 10, 10)
            Next
        Next
        PictureBox1.Image = sourceImg
        PictureBox1.Refresh()


        Dim i2 As Single
        i2 = 1 / 255

        '矩阵
        Dim imageAttributes As New ImageAttributes()

        Dim k As Integer
        For k = 0 To 255
            Dim w As Single
            w = i2 * k
            Dim imgMatrixElement()() As Single = {
                  New Single() {0, 0, 0, 0, 0},
                  New Single() {0, 0, 0, 0, 0},
                  New Single() {0, 0, 0, 0, 0},
                  New Single() {0, 0, 0, 1, 0},
                  New Single() {w, w, w, 0, 0}
                }

            Dim imgMatrix As New ColorMatrix(imgMatrixElement)
            imageAttributes.SetColorMatrix(imgMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap)
            Dim destImg As New Bitmap(sourceImg.Width, sourceImg.Height)
            Dim g As Graphics = Graphics.FromImage(destImg)
            g.DrawImage(sourceImg, New Rectangle(0, 0, sourceImg.Width, sourceImg.Height), 0, 0, sourceImg.Width, sourceImg.Height,
                                GraphicsUnit.Pixel, imageAttributes)


            PictureBox1.Image = destImg
            PictureBox1.Refresh()

        Next

        Dim time_end As DateTime = Now
        Dim tspan As New TimeSpan()
        tspan = time_end - time_start

        TextBox1.Text = tspan.TotalMilliseconds.ToString
    End Sub

方法3:

 Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        Dim time_start As DateTime = Now

        Dim sourceImg As New Bitmap(PictureBox1.Width, PictureBox1.Height)
        Dim sourceGraphic As Graphics = Graphics.FromImage(sourceImg)

        Dim pos(199) As Integer

        For l As Integer = 0 To 199
            pos(l) = l * 12
        Next

        Dim k As Integer
        For k = 0 To 255

            For i As Integer = 0 To 199
                For j As Integer = 0 To 199
                    Dim MyBrush1 As New SolidBrush(Color.FromArgb(k, k, k))
                    sourceGraphic.FillRectangle(MyBrush1, pos(i), pos(j), 10, 10)
                Next
            Next

            'Dim destImg As Bitmap = sourceImg.Clone

            PictureBox1.Image = sourceImg
            PictureBox1.Refresh()
        Next

        Dim time_end As DateTime = Now
        Dim tspan As New TimeSpan()
        tspan = time_end - time_start

        TextBox1.Text = tspan.TotalMilliseconds.ToString
    End Sub

方法4:

    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
        Dim time_start As DateTime = Now

        Dim sourceImg As New Bitmap(PictureBox1.Width, PictureBox1.Height)
        Dim sourceGraphic As Graphics = Graphics.FromImage(sourceImg)

        Dim pos(199) As Integer

        For l As Integer = 0 To 199
            pos(l) = l * 12
        Next

        Dim k As Integer
        For k = 0 To 255

            For i As Integer = 0 To 199
                For j As Integer = 0 To 199
                    Dim MyBrush1 As New SolidBrush(Color.FromArgb(k, k, k))
                    sourceGraphic.FillRectangle(MyBrush1, pos(i), pos(j), 10, 10)
                Next
            Next

            Dim destGraphic As Graphics = PictureBox1.CreateGraphics
            destGraphic.DrawImage(sourceImg, New Point(0, 0))
            'PictureBox1.Refresh()
        Next

        Dim time_end As DateTime = Now
        Dim tspan As New TimeSpan()
        tspan = time_end - time_start

        TextBox1.Text = tspan.TotalMilliseconds.ToString
    End Sub

方法5:

    Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
        Dim time_start As DateTime = Now

        Dim pos(199) As Integer
        For l As Integer = 0 To 199
            pos(l) = l * 12
        Next

        Dim sourceImg As New Bitmap(10, 10)
        Dim sourceGraphic As Graphics = Graphics.FromImage(sourceImg)
        For i As Integer = 0 To 255
            Dim fillBrush As New SolidBrush(Color.FromArgb(i, i, i))
            sourceGraphic.FillRectangle(fillBrush, New Rectangle(0, 0, sourceImg.Width, sourceImg.Height))

            Dim destImg As New Bitmap(PictureBox1.Width, PictureBox1.Height)
            Dim destGraphic As Graphics = Graphics.FromImage(destImg)

            For j As Integer = 0 To 199
                For k As Integer = 0 To 199
                    destGraphic.DrawImage(sourceImg, New Point(pos(j), pos(k)))
                Next
            Next
            PictureBox1.Image = destImg
            PictureBox1.Refresh()
            destGraphic.Dispose()

        Next
        Dim time_end As DateTime = Now
        Dim tspan As New TimeSpan()
        tspan = time_end - time_start

        TextBox1.Text = tspan.TotalMilliseconds.ToString
    End Sub

以上5个方法的速度对比:

方法1:7828.9485
方法2:7907.0448
方法3:7766.4385
方法4:10079.1807
方法5:6590.5865

 

总的来看,还是很慢。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值