Seite 1 von 1

Direkter Zugriff auf PB Image

Verfasst: 27.06.2006 23:10
von sverson

Code: Alles auswählen

;/ 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

:wink: sverson

Verfasst: 30.10.2006 23:06
von Franky
Hi sverson

An sich ne coole Sache, nur dass sie nicht funktioniert, wenn man loadImage nutzt. Da krieg ich dann mal ganz locker nen Invalid Memory Access

Verfasst: 31.10.2006 01:37
von Kaeru Gaman
gelöscht wegen spam

Verfasst: 31.10.2006 12:04
von Franky
Hm, k, ich nehm alles zurück. Erst den Code ändern und sich dann wundern, wenn´s nich läuft. /:->

Verzeiht mir, bin krank :oops: