Code: Select all
;/ sverson 06/06 | PB4 final
;/ Draw to PB image without 2DDrawing lib
Global MainWindowNo.l, MainWindowID.l
Global ImageNo.l, ImageID.l, ImWidth.l, ImHeight.l, ImBytes.l, ImLine.l, *Image
Global ImageGG.l
Structure RGB
Blue.c
Green.c
Red.c
EndStructure
Procedure.l InitImage()
*Image = 0
;ImageNo.l = LoadImage(#PB_Any,"C:\test.bmp") ; load your own image
ImageNo.l = CatchImage(#PB_Any,?BitMap_bmp_Start) : ResizeImage(ImageNo,400,400,#PB_Image_Raw)
ImageID.l = ImageID(ImageNo)
If GetObject_(ImageID, SizeOf(BITMAP), @ImageInfo.BITMAP)
ImWidth = ImageInfo\bmWidth
ImHeight = ImageInfo\bmHeight
ImBytes = ImageInfo\bmBitsPixel/8
ImLine = ImWidth*ImBytes
*Image = ImageInfo\bmBits
EndIf
ProcedureReturn *Image
EndProcedure
Procedure ImageColorXor()
Protected ImRow.l, ImCol.l, *Point.RGB
For ImRow=0 To ImHeight-1
For ImCol=0 To ImWidth-1
*Point = *Image + (ImCol*ImBytes) + (ImRow*ImLine)
*Point\Red ! *Point\Green
*Point\Green ! *Point\Blue
*Point\Blue ! *Point\Red
Next
Next
EndProcedure
Procedure OpenMainWindow()
MainWindowNo = OpenWindow(#PB_Any,0,0,0,0,"click on image to change color!",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
If MainWindowNo
MainWindowID = WindowID(MainWindowNo)
; If CreateGadgetList(MainWindowID)
If InitImage()
ImageGG = ImageGadget(#PB_Any,10,10,0,0,ImageID)
ResizeWindow(MainWindowNo,#PB_Ignore,#PB_Ignore,ImageWidth(ImageNo)+20,ImageHeight(ImageNo)+20)
ProcedureReturn #True
EndIf
; EndIf
EndIf
ProcedureReturn #False
EndProcedure
Procedure CloseMainWindow()
If IsImage(ImageNo) : FreeImage(ImageNo) : EndIf
If IsWindow(MainWindowNo) : CloseWindow(MainWindowNo) : EndIf
EndProcedure
Procedure MainEventHandler()
Protected ImageWindowEvent.l
Repeat
ImageWindowEvent = WaitWindowEvent()
If ImageWindowEvent = #PB_Event_Gadget
If EventGadget() = ImageGG
ImageColorXor()
SetGadgetState(ImageGG,ImageID)
EndIf
EndIf
Until ImageWindowEvent = #PB_Event_CloseWindow
EndProcedure
If OpenMainWindow()
MainEventHandler()
EndIf
CloseMainWindow()
End
DataSection
BitMap_bmp_Start:
Data.l $04E84D42,$00000000,$00360000,$00280000,$00140000,$00140000,$00010000,$00000018,$00000000,$0B120000,$0B120000,$00000000
Data.l $00000000,$FFFF0000,$00FFFFFF,$FFFFFFFF,$FFFF00FF,$00FFFFFF,$FFFFFFFF,$FFFF00FF,$00FFFFFF,$FFFFFFFF,$FFFF00FF,$00FFFFFF
Data.l $FFFFFFFF,$FFFF00FF,$00FFFFFF,$FFFFFFFF,$FFFF00FF,$FFFFFF00,$FF00FFFF,$FFFFFFFF,$FFFFFF00,$FF00FFFF,$FFFFFFFF,$FFFFFF00
Data.l $FF00FFFF,$FFFFFFFF,$FFFFFF00,$FF00FFFF,$FFFFFFFF,$FFFFFF00,$FF00FFFF,$FFFFFFFF,$00FF00FF,$00FFFFFF,$FFFF00FF,$00FF00FF
Data.l $00FFFFFF,$FFFF00FF,$00FF00FF,$00FFFFFF,$FFFF00FF,$00FF00FF,$00FFFFFF,$FFFF00FF,$00FF00FF,$00FFFFFF,$FF0000FF,$FFFFFF00
Data.l $FF00FF00,$FF00FFFF,$FFFFFF00,$FF00FF00,$FF00FFFF,$FFFFFF00,$FF00FF00,$FF00FFFF,$FFFFFF00,$FF00FF00,$FF00FFFF,$FFFFFF00
Data.l $FF00FF00,$FFFFFFFF,$0000FFFF,$FFFFFFFF,$FFFF0000,$0000FFFF,$FFFFFFFF,$FFFF0000,$0000FFFF,$FFFFFFFF,$FFFF0000,$0000FFFF
Data.l $FFFFFFFF,$FFFF0000,$0000FFFF,$FFFFFFFF,$00FF0000,$FFFFFF00,$FF0000FF,$00FFFFFF,$FFFFFF00,$FF0000FF,$00FFFFFF,$FFFFFF00
Data.l $FF0000FF,$00FFFFFF,$FFFFFF00,$FF0000FF,$00FFFFFF,$FFFFFF00,$FF0000FF,$FFFFFFFF,$FF0000FF,$00FFFFFF,$FFFFFF00,$FF0000FF
Data.l $00FFFFFF,$FFFFFF00,$FF0000FF,$00FFFFFF,$FFFFFF00,$FF0000FF,$00FFFFFF,$FFFFFF00,$FF0000FF,$00FFFFFF,$0000FF00,$FFFFFFFF
Data.l $FFFF0000,$0000FFFF,$FFFFFFFF,$FFFF0000,$0000FFFF,$FFFFFFFF,$FFFF0000,$0000FFFF,$FFFFFFFF,$FFFF0000,$0000FFFF,$FFFFFFFF
Data.l $FFFF0000,$FFFFFFFF,$FFFF00FF,$00FFFFFF,$FFFFFFFF,$FFFF00FF,$00FFFFFF,$FFFFFFFF,$FFFF00FF,$00FFFFFF,$FFFFFFFF,$FFFF00FF
Data.l $00FFFFFF,$FFFFFFFF,$FFFF00FF,$00FFFFFF,$FF00FFFF,$FFFFFFFF,$FFFFFF00,$FF00FFFF,$FFFFFFFF,$FFFFFF00,$FF00FFFF,$FFFFFFFF
Data.l $FFFFFF00,$FF00FFFF,$FFFFFFFF,$FFFFFF00,$FF00FFFF,$FFFFFFFF,$FFFFFF00,$FFFFFFFF,$FF00FFFF,$FFFFFFFF,$FFFFFF00,$FF00FFFF
Data.l $FFFFFFFF,$FFFFFF00,$FF00FFFF,$FFFFFFFF,$FFFFFF00,$FF00FFFF,$FFFFFFFF,$FFFFFF00,$FF00FFFF,$FFFFFFFF,$00FFFF00,$FFFFFFFF
Data.l $FFFF00FF,$00FFFFFF,$FFFFFFFF,$FFFF00FF,$00FFFFFF,$FFFFFFFF,$FFFF00FF,$00FFFFFF,$FFFFFFFF,$FFFF00FF,$00FFFFFF,$FFFFFFFF
Data.l $FFFF00FF,$FFFFFFFF,$00FFFFFF,$FFFFFFFF,$FFFF00FF,$00FFFFFF,$FFFFFFFF,$FFFF00FF,$00FFFFFF,$FFFFFFFF,$FFFF00FF,$00FFFFFF
Data.l $FFFFFFFF,$FFFF00FF,$00FFFFFF,$FFFFFFFF,$FFFF00FF,$FFFFFF00,$FF00FFFF,$FFFFFFFF,$FFFFFF00,$FF00FFFF,$FFFFFFFF,$FFFFFF00
Data.l $FF00FFFF,$FFFFFFFF,$FFFFFF00,$FF00FFFF,$FFFFFFFF,$FFFFFF00,$FF00FFFF,$FFFFFFFF,$00FF00FF,$00FFFFFF,$FFFF00FF,$00FF00FF
Data.l $00FFFFFF,$FFFF00FF,$00FF00FF,$00FFFFFF,$FFFF00FF,$00FF00FF,$00FFFFFF,$FFFF00FF,$00FF00FF,$00FFFFFF,$FF0000FF,$FFFFFF00
Data.l $FF00FF00,$FF00FFFF,$FFFFFF00,$FF00FF00,$FF00FFFF,$FFFFFF00,$FF00FF00,$FF00FFFF,$FFFFFF00,$FF00FF00,$FF00FFFF,$FFFFFF00
Data.l $FF00FF00,$FFFFFFFF,$0000FFFF,$FFFFFFFF,$FFFF0000,$0000FFFF,$FFFFFFFF,$FFFF0000,$0000FFFF,$FFFFFFFF,$FFFF0000,$0000FFFF
Data.l $FFFFFFFF,$FFFF0000,$0000FFFF,$FFFFFFFF,$00FF0000,$FFFFFF00,$FF0000FF,$00FFFFFF,$FFFFFF00,$FF0000FF,$00FFFFFF,$FFFFFF00
Data.l $FF0000FF,$00FFFFFF,$FFFFFF00,$FF0000FF,$00FFFFFF,$FFFFFF00,$FF0000FF,$FFFFFFFF,$FF0000FF,$00FFFFFF,$FFFFFF00,$FF0000FF
Data.l $00FFFFFF,$FFFFFF00,$FF0000FF,$00FFFFFF,$FFFFFF00,$FF0000FF,$00FFFFFF,$FFFFFF00,$FF0000FF,$00FFFFFF,$0000FF00,$FFFFFFFF
Data.l $FFFF0000,$0000FFFF,$FFFFFFFF,$FFFF0000,$0000FFFF,$FFFFFFFF,$FFFF0000,$0000FFFF,$FFFFFFFF,$FFFF0000,$0000FFFF,$FFFFFFFF
Data.l $FFFF0000,$0000FFFF
BitMap_bmp_End:
EndDataSection