DCs von Images & Sprites ermitteln
- blbltheworm
- Beiträge: 217
- Registriert: 22.09.2004 19:36
- Wohnort: Auf der schönen Schwäbischen Alb
DCs von Images & Sprites ermitteln
Hallo zusammen,
ich würde gerne ein wenig mit BitBlt rumspielen.
Momentan weiß ich aber nur, wie man an den DC von Gadgets kommt.
Wie sieht das mit den DCs von Images & Sprites aus??
Bzw. kann man mit BitBlt überhaupt auf Sprites zugreifen??
ich würde gerne ein wenig mit BitBlt rumspielen.
Momentan weiß ich aber nur, wie man an den DC von Gadgets kommt.
Wie sieht das mit den DCs von Images & Sprites aus??
Bzw. kann man mit BitBlt überhaupt auf Sprites zugreifen??
Hi,
soweit ich weiss liefert der Befehl StartDrawing einen DC zurück.
MfG Klaus
soweit ich weiss liefert der Befehl StartDrawing einen DC zurück.
Code: Alles auswählen
DC=StartDrawing(ImageOutput())
PureBasicPower TailBite Printer_Lib / PDFBarcode / PrintBarcode / ExcelWriter
- blbltheworm
- Beiträge: 217
- Registriert: 22.09.2004 19:36
- Wohnort: Auf der schönen Schwäbischen Alb
nun ja irgendwie geht das schon :
PS: BitBlt müsste auch ausserhalb von StartDrawing() / StopDrawing() funktionieren
MfG Klaus
Code: Alles auswählen
DC1=SpriteOutput(1)
DC2=SpriteOutput(2)
StartDrawing(DC1)
; zeichenoperationen hier
StopDrawing()
StartDrawing(DC2)
; zeichenoperationen hier
StopDrawing()
MfG Klaus
PureBasicPower TailBite Printer_Lib / PDFBarcode / PrintBarcode / ExcelWriter
So geht das 100%ig nicht, weil SpriteOutput() kein DC zurückgibt, sondern eine Struktur, die wie folgt aussieht:ABBKlaus hat geschrieben:Code: Alles auswählen
DC1=SpriteOutput(1) DC2=SpriteOutput(2) StartDrawing(DC1) ; zeichenoperationen hier StopDrawing() StartDrawing(DC2) ; zeichenoperationen hier StopDrawing()
Code: Alles auswählen
Structure DrawingInfoStruct
Type.l ; Type of the DC
Window.l ; Window associated to the DC (if any)
DC.l ; DC
ReleaseProcedure.l ; Address to a procedure to release the DC when StopDrawing() is called
PixelBuffer.l ; Address of the memory pixel buffer (DirectX)
Pitch.l ; Pitch
Width.l
Height.l
Depth.l
EndStructure

[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
- blbltheworm
- Beiträge: 217
- Registriert: 22.09.2004 19:36
- Wohnort: Auf der schönen Schwäbischen Alb
OK, geht es auch einfacher als so:
Denn einfach
geht nicht.
Und wie komm ich an den DC von Images??
Anmerkung:
nach SpriteOutput(0) tut DisplaySprite nicht mehr
Code: Alles auswählen
LoadSprite(0, "pic.bmp")
tmpMem=AllocateMemory(SizeOf(DrawingInfoStruct))
tmpMem=SpriteOutput(0)
CopyMemory(tmpMem,@sInfo1,SizeOf(DrawingInfoStruct))
Debug "Type: " + Str(sInfo1\Type)
Debug "Window: " + Str(sInfo1\Window)
Debug "DC: " + Str(sInfo1\DC)
Debug "Width: " + Str(sInfo1\Width)
Debug "Height: " + Str(sInfo1\Height)
Code: Alles auswählen
@sInfo1=SpriteOutput(0)
Und wie komm ich an den DC von Images??
Anmerkung:
nach SpriteOutput(0) tut DisplaySprite nicht mehr
nun in etwa so :
PS: der bitblt funktioniert nicht !?
Code: Alles auswählen
Procedure.s X_GetLastError()
err=GetLastError_()
buffer.l=0
ferr=FormatMessage_(#FORMAT_MESSAGE_ALLOCATE_BUFFER|#FORMAT_MESSAGE_FROM_SYSTEM,0,err,GetUserDefaultLangID_(),@buffer,0,0)
If buffer<>0
errormsg$=PeekS(buffer)
LocalFree_(buffer)
errormsg$=RemoveString(errormsg$,Chr(13)+Chr(10))
ProcedureReturn errormsg$
EndIf
EndProcedure
Structure DRAWINGINFO
Type.l ; Type of the DC
Window.l ; Window associated to the DC (if any)
DC.l ; DC
ReleaseProcedure.l ; Address to a procedure to release the DC when StopDrawing() is called
PixelBuffer.l ; Address of the memory pixel buffer (DirectX)
Pitch.l ; Pitch
Width.l
Height.l
Depth.l
EndStructure
#Window_Main=0
If OpenWindow(#Window_Main,0,0,200,200,#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_TitleBar|#PB_Window_ScreenCentered,"Windowtest")
If CreateGadgetList(WindowID(#Window_Main))
ImageGadget(1,0,0,100,100,0)
ButtonGadget(2,10,110,30,20,"45°",#PB_Button_Toggle)
SetTimer_(WindowID(#Window_Main),1,300,0)
EndIf
EndIf
img1=CreateImage(#PB_Any,100,100)
img2=CreateImage(#PB_Any,100,100)
UseImage(img1)
*struc1.DRAWINGINFO=ImageOutput()
Debug PeekL(*struc1+8)
DC1=StartDrawing(*struc1)
Debug DC1
; zeichenoperationen hier
Line(0,0,100,100,#White)
StopDrawing()
Debug PeekL(*struc1+8)
UseImage(img2)
*struc2.DRAWINGINFO=ImageOutput()
Debug PeekL(*struc2+8)
DC2=StartDrawing(*struc2)
Debug DC2
; zeichenoperationen hier
Line(100,0,-100,100,#White)
StopDrawing()
Debug PeekL(*struc2+8)
SetGadgetState(1,UseImage(img1))
Repeat
WindowEvent=WaitWindowEvent()
EventType=EventType()
EventGadgetID=EventGadgetID()
Select WindowEvent
Case #PB_Event_Gadget
Select EventType
Case #PB_EventType_LeftClick
Select EventGadgetID
Case 1 ; Image
Debug "ImageGadget"
index+1
If index>1
index=0
EndIf
Select index
Case 0
SetGadgetState(1,UseImage(img1))
Case 1
SetGadgetState(1,UseImage(img2))
EndSelect
Case 2 ; Button
res=BitBlt_(DC2,0,0,100,100,DC1,0,0,#SRCCOPY)
If res=0
Debug Str(res)+" "+X_GetLastError()
EndIf
EndSelect
EndSelect
EndSelect
Until WindowEvent=#PB_Event_CloseWindow
PureBasicPower TailBite Printer_Lib / PDFBarcode / PrintBarcode / ExcelWriter
- FGK
- Beiträge: 249
- Registriert: 09.01.2005 14:02
- Computerausstattung: i5-4430 CPU / 8GB RAM
GeForce GT630
Windows 10 Home / 64-bit - Wohnort: Augsburg
@ABBKlaus
ich vermute das BitBlt_ nicht geht weil man
entgegen Spriteoutput() mit ImageOutput() das hDC erhällt.
D.h. nur für Sprites brauchst du die Stuktur DrawingInfo
sollte also den hDC des Images liefern
Gruß FGK
[EDIT]
Habs auf meine Weise ausprobiert und ging auch nicht! Hmmm
[EDIT2]
Hab im Archiv gelesen die hDC sind nur bis StopDrawing() gültig?!
ich vermute das BitBlt_ nicht geht weil man
entgegen Spriteoutput() mit ImageOutput() das hDC erhällt.
D.h. nur für Sprites brauchst du die Stuktur DrawingInfo
Code: Alles auswählen
hDC = StartDrawing(ImageOutput())
Gruß FGK
[EDIT]
Habs auf meine Weise ausprobiert und ging auch nicht! Hmmm

[EDIT2]
Hab im Archiv gelesen die hDC sind nur bis StopDrawing() gültig?!