Results 1 to 2 of 2

Thread: Function optimization

  1. #1

    Thread Starter
    Lively Member
    Join Date
    Aug 2002
    Posts
    103

    Function optimization

    Hi all!
    I wrote the following function:

    Function FillBitmap(Buffer() As Byte, SrcColor As RGB, DestColor As RGB, Width As Long, Height As Long)
    Dim Red As Double, Green As Double, Blue As Double
    Dim DeltaRed As Double, DeltaBlue As Double, DeltaGreen As Double
    SrcColorRed = SrcColor.Red
    SrcColorGreen = SrcColor.Green
    SrcColorBlue = SrcColor.Blue
    DestColorRed = DestColor.Red
    DestColorGreen = DestColor.Green
    DestColorBlue = DestColor.Blue
    DeltaRed = (SrcColorRed - DestColorRed) / Height
    DeltaGreen = (SrcColorGreen - DestColorGreen) / Height
    DeltaBlue = (SrcColorBlue - DestColorBlue) / Height
    Red = SrcColor.Red
    Green = SrcColor.Green
    Blue = SrcColor.Blue
    For Y = 0 To Height - 1
    Red = Red - DeltaRed
    Green = Green - DeltaGreen
    Blue = Blue - DeltaBlue
    For X = 0 To Width - 1
    Buffer((Y * Width + X) * 3) = Blue
    Buffer((Y * Width + X) * 3 + 1) = Green
    Buffer((Y * Width + X) * 3 + 2) = Red
    Next X
    Next Y
    End Function

    But it's really slow! It takes about a second (950 ms) to fill fullscreen 800x600. How can I optimize it for better performance?

  2. #2
    Guru Aaron Young's Avatar
    Join Date
    Jun 1999
    Location
    Red Wing, MN, USA
    Posts
    2,177
    VB Code:
    1. Function FillBitmap(Buffer() As Byte, SrcColor As RGB, DestColor As RGB, ByVal Width As Long, ByVal Height As Long)
    2.   Dim SrcColorRed As Byte, SrcColorGreen As Byte, SrcColorBlue As Byte
    3.   Dim DestColorRed As Byte, DestColorGreen As Byte, DestColorBlue As Byte
    4.  
    5.   Dim Red As Double, Green As Double, Blue As Double
    6.   Dim DeltaRed As Double, DeltaBlue As Double, DeltaGreen As Double
    7.  
    8.   Dim Y As Long, X As Long, lIndex As Long
    9.  
    10.   SrcColorRed = SrcColor.Red
    11.   SrcColorGreen = SrcColor.Green
    12.   SrcColorBlue = SrcColor.Blue
    13.  
    14.   DestColorRed = DestColor.Red
    15.   DestColorGreen = DestColor.Green
    16.   DestColorBlue = DestColor.Blue
    17.  
    18.   DeltaRed = (SrcColorRed - DestColorRed) / Height
    19.   DeltaGreen = (SrcColorGreen - DestColorGreen) / Height
    20.   DeltaBlue = (SrcColorBlue - DestColorBlue) / Height
    21.  
    22.   Red = SrcColor.Red
    23.   Green = SrcColor.Green
    24.   Blue = SrcColor.Blue
    25.  
    26.   For Y = 0& To Height - 1&
    27.     Red = Red - DeltaRed
    28.     Green = Green - DeltaGreen
    29.     Blue = Blue - DeltaBlue
    30.     For X = 0& To Width - 1&
    31.       lIndex = (Y& * Width& + X&) * 3&
    32.       Buffer(lIndex&) = Blue
    33.       Buffer(lIndex& + 1&) = Green
    34.       Buffer(lIndex& + 2&) = Red
    35.     Next X
    36.   Next Y
    37. End Function

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width