Direkter Zugriff auf PB Image

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
sverson
Beiträge: 19
Registriert: 06.02.2005 01:42
Wohnort: Deutschland

Direkter Zugriff auf PB Image

Beitrag 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
Benutzeravatar
Franky
Beiträge: 1132
Registriert: 29.08.2004 16:31
Wohnort: Münsterland
Kontaktdaten:

Beitrag 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
Falsch zugeordnetes Zitat des Tages: "O'zapft is" - Edward Snowden :)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

gelöscht wegen spam
Zuletzt geändert von Kaeru Gaman am 31.10.2006 12:59, insgesamt 1-mal geändert.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Franky
Beiträge: 1132
Registriert: 29.08.2004 16:31
Wohnort: Münsterland
Kontaktdaten:

Beitrag 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:
Falsch zugeordnetes Zitat des Tages: "O'zapft is" - Edward Snowden :)
Antworten