I need a hint, how to improve this code:
Code: Select all
Procedure.b GrayScaleImg ( ImgID.l ); Works only with 32 Bit Images!!
Protected Grey.l
#lumared = 3
#lumagreen = 6
#lumablue = 1
If Not IsImage( ImgID ) Or Not GetObject_(ImageID(ImgID), SizeOf(BITMAP), bmp.BITMAP) : ProcedureReturn #False : EndIf
*ptr.RGBQUAD = bmp\bmBits
Size = *ptr + ImageWidth(ImgID) * ImageHeight(ImgID) * 4 - 4
Repeat
Grey = (#lumared * *ptr\rgbRed&$FF + #lumagreen * *ptr\rgbGreen&$FF + #lumablue * *ptr\rgbBlue&$FF) / 10
*ptr\rgbRed = Grey
*ptr\rgbGreen = *ptr\rgbRed
*ptr\rgbBlue = *ptr\rgbRed
*ptr + 4
Until *ptr > Size
ProcedureReturn #True
EndProcedure
If CreateImage( 1, 4000, 4000, 32)
time = ElapsedMilliseconds()
GrayScaleImg( 1 )
MessageRequester("", Str(ElapsedMilliseconds() - time), 0)
EndIf
---------
PB 4.10: 594ms
PB 4.20: 594ms
C-Lib: 188ms