Hallo, frohe Ostern.
Ich möchte ein Speicherbereich für eine Bitmap reservieren und dann diese in einem DC wandeln. Damit vom PLGBLT dort eine gedrehte Grafik reingeschrieben wird.
plgBlt(dc,pts,hDCBits,0,0,xx,yy,0,0,0)
Wie geht das ?
Danke.
Gruss
BMPin ein DC wandeln für die Routine : PLGBLT
- Fluid Byte
- Beiträge: 3110
- Registriert: 27.09.2006 22:06
- Wohnort: Berlin, Mitte
Re: BMPin ein DC wandeln für die Routine : PLGBLT
Boardsuche kaputt?
Windows 10 Pro, 64-Bit / Outtakes | Derek
Re: BMPin ein DC wandeln für die Routine : PLGBLT
Jup, danke. Du hast recht.
Meine weitere Frage:
Wie kann man in dieser Routine den Drehmittelpunkt verlegen?
Danke.
Gruss
Code ist aus dem Forum hier:
Meine weitere Frage:
Wie kann man in dieser Routine den Drehmittelpunkt verlegen?
Danke.
Gruss
Code ist aus dem Forum hier:
Code: Alles auswählen
UseJPEGImageDecoder()
Procedure RotateIm(ImNr.i, wkl.f)
Dim Vert.POINT(2)
wi.i = ImageWidth(ImNr)
hi.i = ImageHeight(ImNr)
; Vert(0) = linke obere Ecke
; Vert(1) = rechte obere Ecke
; Vert(2) = linke untere Ecke der gedrehten Image berechnen
Vert(0)\x = 0
Vert(0)\y = 0
Vert(1)\x = wi * Cos(wkl)
Vert(1)\y = wi * Sin(wkl)
Vert(2)\x = -1 * hi * Sin(wkl)
Vert(2)\y = hi * Cos(wkl)
; Die nächsten 4 If - Bedingungen dienen nur dazu, das die Ecken des Bildes nicht aus den sichtbaren Bereich herausrutschen
If Vert(1)\x < 0
Vert(0)\x = -1 * Vert(1)\x
Vert(2)\x - Vert(1)\x
Vert(1)\x = 0
EndIf
If Vert(2)\x < 0
Vert(0)\x = -1 * Vert(2)\x
Vert(1)\x - Vert(2)\x
Vert(2)\x = 0
EndIf
If Vert(1)\y < 0
Vert(0)\y = -1 * Vert(1)\y
Vert(2)\y - Vert(1)\y
Vert(1)\y = 0
EndIf
If Vert(2)\y < 0
Vert(0)\y = -1 * Vert(2)\y
Vert(1)\y - Vert(2)\y
Vert(2)\y = 0
EndIf
CreateImage(1, 700, 600)
ihdc = StartDrawing(ImageOutput(1))
shdc = CreateCompatibleDC_(ihdc)
obm.i = SelectObject_(shdc, ImageID(0))
PlgBlt_(ihdc, @Vert(0), shdc, 0, 0, wi, hi, 0, 0, 0)
DeleteDC_(shdc)
StopDrawing()
CopyImage(1, 0)
EndProcedure
OpenWindow(0, 0, 0, 800, 600, "Bild drehen", #WS_OVERLAPPEDWINDOW)
ImageGadget(0, 5, 5, 700, 600, 0, #PB_Image_Border)
ButtonGadget(1, 710, 5, 85, 20, "Laden")
TextGadget(2, 710, 35, 85, 15, "Winkel")
StringGadget(3, 710, 50, 85, 20, "0")
ButtonGadget(4, 710, 75, 85, 20, "Drehen")
Repeat
event = WaitWindowEvent()
Select event
Case #PB_Event_Gadget
Select EventGadget()
Case 1
dn.s = OpenFileRequester("Bild laden", "", "Bitmaps|*.bmp;*.jpg|Alle|*.*", 0)
If dn <> ""
If LoadImage(0, dn)
SetGadgetState(0, ImageID(0))
EndIf
EndIf
Case 4
wkl.f = ValF(GetGadgetText(3))
RotateIm(0, wkl)
SetGadgetState(0, ImageID(0))
EndSelect
EndSelect
Until event = #PB_Event_CloseWindow