[B2D] DrawImagePitch, DrawImageYaw

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

SpionAtom

Betreff: [B2D] DrawImagePitch, DrawImageYaw

BeitragSa, Apr 18, 2009 0:15
Antworten mit Zitat
Benutzer-Profile anzeigen
RotateImage-Pseudo-3D-Ergänzungen
Da das ganze Bild ausgelesen wird, ist die Echtzeittauglichkeit beschränkt. Bei kleineren Bildern sollte es kein Problem darstellen.

DrawImageYaw dreht ein Bild an der Bildmittleren vertikalen Achse
DrawImagePitch dreht ein Bild an der Bildmittleren horizontalen Achse
Winkel - benötigte Hilfsfunktion

DrawImageYaw(pic, posX, posY, angle)
DrawImagePitch(pic, posX, posY, angle)
pic - ImageHandle
posX, posY - Zeichen-Position
angle - Drehwinkel


Code: [AUSKLAPPEN]
;RotateImage-Pseudo-3D-Ergänzungen
;(nicht unbedingt für Echtzeit geeignet)
;
;DrawImageYaw dreht ein Bild an der Bildmittleren vertikalen Achse
;DrawImagePitch dreht ein Bild an der Bildmittleren horizontalen Achse
;
;von SpionAtom
;
;DrawImageYaw(pic, posX, posY, angle)
;DrawImagePitch(pic, posX, posY, angle)
;   pic         - ImageHandle
;   posX, posY   - Zeichen-Position
;   angle      - Drehwinkel

Graphics 320, 240, 0, 2
SetFont(LoadFont("Courier", 20))



   ;Beispielbild erstellen
   pic = CreateImage(210, 20)
   SetBuffer ImageBuffer(pic)
   For i = 1 To ImageWidth(pic) - 2: For j = 0 To    ImageHeight(pic) - 2
      WritePixel i, j, i * $10000 + j * $100
   Next: Next   
   Rect 0, 0, 210, 20, 0
   Text 0, 0, "S P I O N A T O M"
   
   
   
   SetBuffer BackBuffer()
   Repeat   
      a = (a + 1) Mod 360   
      Cls
      Text 0, 0, a
      DrawImageYaw pic, 55, 80, a * 2
      DrawimagePitch pic, 55, 140, a * 4
      Flip()   
   Until KeyDown(1)
   End
   
   
Function DrawImageYaw(pic, posX, posY, angle)
   w = ImageWidth(pic)
   h = ImageHeight(pic)
   r = w / 2
   npic = CreateImage(w, h)
   
   LockBuffer ImageBuffer(pic)
   LockBuffer ImageBuffer(npic)
   
      For x = 0 To w - 1
         For y = 0 To h - 1
            rpix = ReadPixelFast(x, y, ImageBuffer(pic))
            WritePixelFast(r - Sin(angle) * (r - x), y, rpix, ImageBuffer(npic))
         Next         
      Next
   
   UnlockBuffer ImageBuffer(pic)
   UnlockBuffer ImageBuffer(npic)
   DrawImage npic, posX, posY
End Function


Function DrawImagePitch(pic, posX, posY, angle)
   w = ImageWidth(pic)
   h = ImageHeight(pic)
   r = h / 2
   npic = CreateImage(w, h)
   
   LockBuffer ImageBuffer(pic)
   LockBuffer ImageBuffer(npic)
   
      For x = 0 To w - 1
         For y = 0 To h - 1
            rpix = ReadPixelFast(x, y, ImageBuffer(pic))
            WritePixelFast(x, r - Sin(angle) * (r - y), rpix, ImageBuffer(npic))
         Next         
      Next
   
   UnlockBuffer ImageBuffer(pic)
   UnlockBuffer ImageBuffer(npic)
   DrawImage npic, posX, posY
End Function

;Berechnet den Winkel zwischen der X-Achse und einer Geraden durch zwei Punkte
Function Winkel#(x1#,y1#,x2#,y2#)
 Return (360+ATan2(x1#-x2#,y1#-y2#)) Mod 360
End Function
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080
  • Zuletzt bearbeitet von SpionAtom am Sa, Apr 18, 2009 10:52, insgesamt einmal bearbeitet

Kernle 32DLL

BeitragSa, Apr 18, 2009 0:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Es fehlt ein End Function *hust*

Aber ansonsten eine wirklich tolle Sache. Fehlt nurnoch die Kombination aus beidem Wink

So long,
Kernle
Mein PC: "Bluelight" - Xtreme Gamer PC [Video]
Meine Projekte: Cube-Wars 2010 [Worklog]
Anerkennungen: 1. Platz BCC #7 , 1. Platz BCC #22 , 3. Platz BAC #89
Ich war dabei: NRW Treff III, IV ; Frankfurter BB Treffen 2009

Nicdel

BeitragSa, Apr 18, 2009 0:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Wirklich nützliche Funktionen, z.B. für Logoeinblendungen.

Mfg Nicdel
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7
 

Magier Gandalf

BeitragSo, Jul 26, 2009 12:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Nicht schlecht....

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group