garfield9992003 hat geschrieben:*grummel*
Warum ist das gespeicherte 0.jpg ok, aber das 1.jpg nicht ?
Es sollten doch beide identisch sein, oder?
Was ist am Bitblt_ denn falsch?
Das BitBlt ist schon richtig.
1.) Der DC des Bild 0 (dcv) ist nur bis zum StopDrawing() gültig.
2.) CreateImage für Bild 1 muß außerhalb des Start/StopDrawing sein.
Punkt 1 ist ganz logisch, da dcv außerhalb Start/StopDrawing nicht
mehr gültig ist.
Punkt 2 kann ich nicht ganz nachvollziehen. Liegt intern daran
wie PB Images erstellt. Durch das CreateImage scheint dcv
ungültig zu werden, d.h. das CreateImage setzt scheinbar
intern etwas zurück, oder PB verwendet fälschlicherweise
intern einen globalen DC.
So gehts also:
Code: Alles auswählen
BitmapID = CreateImage(1,200,400) ; muss ausserhalb des StartDrawing sein
hBmp = CreateImage(0,200,400)
dcv = StartDrawing(ImageOutput()) ; dcv anfordern
If dcv
Box(50,50,100,300,RGB(255,255,255))
MemDC = CreateCompatibleDC_(dcv) ; MemDC erstellen
If MemDC
oldBmp = SelectObject_(MemDC,BitmapID) ; neues image setzen, altes speichern
BitBlt_(MemDC,0,0,200,400,dcv,0,0,#SRCCOPY) ; blit
SelectObject_(MemDC,oldBmp) ; altes image zuruecksetzen
DeleteDC_(MemDC) ; MemDC freigeben
EndIf
StopDrawing() ; dcv freigeben
EndIf
UseJPEGImageEncoder()
SaveImage(0,"0.jpg",#PB_ImagePlugin_JPEG)
SaveImage(1,"1.jpg",#PB_ImagePlugin_JPEG)