|
-
Apr 8th, 2003, 11:48 AM
#1
Thread Starter
Lively Member
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?
-
Apr 8th, 2003, 07:55 PM
#2
VB Code:
Function FillBitmap(Buffer() As Byte, SrcColor As RGB, DestColor As RGB, ByVal Width As Long, ByVal Height As Long)
Dim SrcColorRed As Byte, SrcColorGreen As Byte, SrcColorBlue As Byte
Dim DestColorRed As Byte, DestColorGreen As Byte, DestColorBlue As Byte
Dim Red As Double, Green As Double, Blue As Double
Dim DeltaRed As Double, DeltaBlue As Double, DeltaGreen As Double
Dim Y As Long, X As Long, lIndex As Long
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&
lIndex = (Y& * Width& + X&) * 3&
Buffer(lIndex&) = Blue
Buffer(lIndex& + 1&) = Green
Buffer(lIndex& + 2&) = Red
Next X
Next Y
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
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|