I've used a CustomFilter from time to time in similar cases to speed up things...
...but keep in mind to use a global variable for summarizing the pixel info within the callback routine.
Code: Select all
UseJPEGImageDecoder()
UseJPEG2000ImageDecoder()
UsePNGImageDecoder()
UseTIFFImageDecoder()
UseTGAImageDecoder()
Define x, y, countOfAllfPixels, pixelColor
Define imageFilePath$
Global TotalImageBrightness.d
Procedure Brightness(x,y,c,d)
x=c&$FF
y=(c>>8)&$FF
c=(c>>16)&$FF
TotalImageBrightness+Sqr(x*x*0.299+y*y*0.587+c*c*0.114)
EndProcedure
imageFilePath$= "IQ.png"
If FileSize(imageFilePath$)<0
imageFilePath$= OpenFileRequester("Open image file", "", "", 0)
EndIf
If FileSize(imageFilePath$)>0
image = LoadImage(#PB_Any, imageFilePath$)
If image>=0
countOfAllfPixels = ImageWidth(image) * ImageHeight(image)
TotalImageBrightness=0
StartDrawing(ImageOutput(image))
CustomFilterCallback(@Brightness())
DrawingMode(#PB_2DDrawing_CustomFilter)
DrawImage(ImageID(image),0,0)
StopDrawing()
FreeImage(image)
Debug totalImageBrightness / countOfAllfPixels
EndIf
EndIf