Code: Select all
Declare Swap24(*bmp.BITMAP)
Declare Swap24_POINT_PLOT(img)
; Load the image into memory
UseJPEGImageDecoder()
LoadImage(0, #PB_Compiler_Home+"examples\sources\data\r2skin.jpg")
; Get information about the image
GetObject_(ImageID(0), SizeOf(BITMAP), @bmp.BITMAP)
With bmp
Debug \bmWidth
Debug \bmHeight
Debug \bmWidthBytes
Debug \bmBitsPixel
Debug \bmBits
EndWith
OpenWindow(0,0,0,bmp\bmWidth,bmp\bmHeight+70,"",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
ImageGadget(0,0,0,0,0,ImageID(0))
ButtonGadget(1,250,522,200,20,"Swap via structured pointer")
ButtonGadget(2,50,522,200,20,"Swap via point/plot")
ProgressBarGadget(3, 0,552,512,20,0,ImageWidth(0)*ImageHeight(0))
disabledebugger
Repeat
ev=WaitWindowEvent()
Select ev
Case #PB_Event_Gadget
Select EventGadget()
Case 1
Swap24(@bmp)
SetGadgetState(0,ImageID(0))
Case 2
Swap24_POINT_PLOT(0)
SetGadgetState(0,ImageID(0))
EndSelect
EndSelect
Until ev=#PB_Event_CloseWindow
Procedure Swap24(*bmp.BITMAP)
SetGadgetState(3,0) : cc=0
*buffer.RGBTRIPLE = *bmp\bmBits
While *buffer <= *bmp\bmBits+*bmp\bmWidthBytes**bmp\bmHeight-SizeOf(RGBTRIPLE)
Swap *buffer\rgbtBlue, *buffer\rgbtRed
*buffer+SizeOf(RGBTRIPLE) : cc+1
If cc%1000=0:SetGadgetState(3, cc):EndIf
Wend
EndProcedure
Procedure Swap24_POINT_PLOT(img)
SetGadgetState(3,0) : cc=0
StartDrawing(ImageOutput(img))
For j=0 To ImageHeight(img)-1
For i=0 To ImageWidth(img)-1
color = Point(i,j)
Plot(i,j, RGB(Blue(color),Green(color),Red(color)))
cc+1
If cc%1000=0:SetGadgetState(3, cc):EndIf
Next
Next
StopDrawing()
EndProcedure



