Seite 1 von 1

Sprite aus Memory

Verfasst: 17.11.2005 18:22
von unix
Also ich habe folgendes Problem:

Ich hab ein Bild in einen Buffer geschriben

Schema:

Code: Alles auswählen

Pixel(x,y) = PeekL(*Buffer+x*y*SizeOf(LONG))
Und ich will das in ein Image oder Sprite ohne eine schleife für x und y durchzugehen

also ohne:

Code: Alles auswählen

StartDrawing(SpriteOutput())
 Pitch = DrawingBufferPitch()
                      ;__  
 For y = 0 to 599     ;  \__Ohne das
 For x = 0 to 799     ;__/
 
 *Buffer.LONG = Drawingbuffer()
 *Buffer + (Pitch*y) + (x*4)
 
 *Buffer\l = PeekL(*Img+x*y*SizeOf(LONG))
            ;__
 next       ;  \__Und ohne das
 next       ;__/

StopDrawing()
Also kurz ich brauchse sowas wie

Code: Alles auswählen

CatchSprite(Sprite, *Buffer)

Verfasst: 17.11.2005 18:27
von Franky
Mit Sprite wird schwierig, da die im Videobuffer liegen, mit Images hilft dir GetDIBits_() bzw. SetDIBits_()

ich habe da mal ein Problem

Verfasst: 17.11.2005 19:10
von Xaby
Wo ihr gerade von Sprites redet.
Gibt es eine Möglichkeit, Sprites in einer Windowed-Anwendung zu benutzen oder kann ich da nur die Drawing-Routinen nutzen.
Ich möchte gern den Komfort von Buttons, Menüs und Panel-Tabs usw. nutzen und gleichzeitig Sprites ausgeben.
Die haben aber keine OutPutID ...
Oder kann ich in einem OpenWindow() noch ein OpenScreenWindow() erstellen?

Oder wie könnte ich das machen?

Verfasst: 17.11.2005 19:23
von nco2k
@unix

Code: Alles auswählen

Image.l = CatchImage(#PB_Any, *Buffer)
If Image
  Sprite.l = CreateSprite(#PB_Any, Width, Height)
  If Sprite
    If StartDrawing(SpriteOutput(Sprite))
      DrawImage(UseImage(Image), 0, 0, Width, Height)
      StopDrawing()
    EndIf
  EndIf
  FreeImage(Image)
EndIf
@Xaby

Code: Alles auswählen

If InitSprite() And OpenWindow(0, 0, 0, 640, 480, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "test") And OpenWindowedScreen(WindowID(0), 0, 0, 640, 480, 0, 0, 0)
  
  If CreateSprite(0, 256, 256)
    If StartDrawing(SpriteOutput(0))
      Box(0, 0, 256, 256, RGB(255, 0, 0))
      StopDrawing()
    EndIf
  EndIf
  
  Repeat
    
    ClearScreen(0, 0, 0)
    
    If IsSprite(0)
      DisplaySprite(0, 128, 128)
    EndIf
    
    FlipBuffers()
    
    WinEvent = WindowEvent()
    If WinEvent = 0
      Delay(1)
    EndIf
    
  Until WinEvent = #PB_Event_CloseWindow
  
EndIf

End
edit: gadgets kannst du dann z.b. daneben setzen:

Code: Alles auswählen

If InitSprite() And OpenWindow(0, 0, 0, 640, 480, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "test") And OpenWindowedScreen(WindowID(0), 0, 0, 540, 480, 0, 0, 0)
  
  If CreateGadgetList(WindowID(0))
    ButtonGadget(0, 545, 450, 90, 25, "Exit", #PB_Button_Default)
  EndIf
  
  If CreateSprite(0, 256, 256)
    If StartDrawing(SpriteOutput(0))
      Box(0, 0, 256, 256, RGB(255, 0, 0))
      StopDrawing()
    EndIf
  EndIf
  
  Repeat
    
    ClearScreen(0, 0, 0)
    
    If IsSprite(0)
      DisplaySprite(0, 128, 128)
    EndIf
    
    FlipBuffers()
    
    WinEvent = WindowEvent()
    If WinEvent = 0
      Delay(1)
    ElseIf WinEvent = #PB_Event_Gadget And EventGadgetID() = 0
      Break
    EndIf
    
  Until WinEvent = #PB_Event_CloseWindow
  
EndIf

End
so in etwa.

c ya,
nco2k

Re: ich habe da mal ein Problem

Verfasst: 17.11.2005 19:28
von Ypser
Guck mal unter OpenWindowedScreen().

Verfasst: 17.11.2005 20:54
von unix
nco2k hat geschrieben:@unix

Code: Alles auswählen

Image.l = CatchImage(#PB_Any, *Buffer)
If Image
  Sprite.l = CreateSprite(#PB_Any, Width, Height)
  If Sprite
    If StartDrawing(SpriteOutput(Sprite))
      DrawImage(UseImage(Image), 0, 0, Width, Height)
      StopDrawing()
    EndIf
  EndIf
  FreeImage(Image)
EndIf
ich hatte an so etwas wie Franky angedeutet hat

aber ich keine Ahnung wie man diese Befehle verwendet

MeinZiel ist es ein Scrennshot meines PC´s per Netzwerk an einen anderen Computer zu versenden und das ganze soll so schnell funktionieren das man es als "Video" versendet.

Also ich will so etwas wie MasterEye Programmieren