Bild um den Mittelpunkt drehen?
Übersicht

SlasHeRBetreff: Bild um den Mittelpunkt drehen? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo ich hab nen kleines Problem.
Ich möchte gerne ein Bild drehen. Dazu habe ich die Funktion RotateImage(bild, grad) um es z.b. auf den Kopf zu drehen: RotateImage(bild,180) Dabei ist mir allerdings aufgefallen, dass es sich um den Punkt (0,0) dreht, und nicht um den Mittelpunkt des Bildes? Kann ich das irgendwie ändern? TFormImage?! *keine Ahnung* Wäre euch für ne kurzfristige Info sehr dankbar, hocke grade an nem netten Tool, was ich gern hier veröffentlichen würde ![]() |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
HandleImage
http://www.blitzbase.de/befehle2d/handleimage.htm Alterativ gibts AutoMidHandle Hoffe das ist kurzfristig genug ![]() |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
SlasHeR |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke für die superschnelle Antwort! | ||
SlasHeR |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hmmm..
Angenommen ein Bild ist 64x64 pixel? Wo ist dann die Mitte? 31,31? 32,32? 32,31?,31,32? Das Problem was ich habe, das ich nach 2 maligen drehen um 180 grad Schwarze streifen an den Seiten habe ![]() |
||
![]() |
Vincent |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vermeide es, einmal gedrehte Bilder weiter zu drehen.
Speichere lieber das Ausgangsbild, und drehe es bei Bedarf halt um einen anderen Winkel, um das weitergedrehte Bild zu erhalten. |
||
Gott ist nicht mit uns ... weil er mit Idioten keine Gnade kennt ! |
![]() |
Rone |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
benutze zusätzlich "TFormFilter 0" , dann hast du das Problem mit den Streifen nicht.. Außerdem würde ich das Bild nicht während des Spiels drehen, sondern vorher und in einem Animationsstreifen oder Array speichern (schneller)... Und schau mal hier: https://www.blitzforum.de/foru...highlight= https://www.blitzforum.de/foru...ght=rotate mfg |
||
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Is ja wohl mal voll 2D ![]() ~VERSCHOBEN~ Dieser Thread passte nicht in das Forum, in dem er ursprünglich gepostet wurde. MfG D2006 |
||
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2 |
SlasHeR |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
TFormFilter 0 ist bereits Bestandteil meines Codes (hab alle Seiten zu den Handles auf BlitzBase gelesen...)
Streifen habe ich dennoch. Das Problem ist, ich muss das Bild zwangsweise 2mal drehen. Ob das länger dauert oder nicht ist nicht relevant, da es sich um ein Tool handelt, was ruhig etwas länger brauchen kann. Viel wichtiger ist das es exakt aussieht, und keine Fehler entstehen. Wenn jetzt niemand noch nen entscheiden rat hat, bleibt mir wohl nichts anderes, als eine eigene Funktion zu schreiben, die das Drehen des Bildes übernimmt. Das wäre nicht allzuschlimm, da ich nur 90,180,270 grad brauche, und das mit jeweils 2 for-Schleifen erledigen könnte. Nur ist das vielleicht nicht allzu elegant. ![]() |
||
![]() |
Rone |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also,
wenn du es so machst wie in den o.g. Links, dann geht es auf jeden fall: Code: [AUSKLAPPEN] Graphics 640,480,16 grund=CreateImage(64,64) SetBuffer ImageBuffer(grund) Color 0,0,222 Rect 0,0,64,64 ClsColor 200,0,0 timer = MilliSecs()+30 zeilen = 19 spalten =19 frames = zeilen *spalten img= Rotate(grund,zeilen,spalten);,"test2.bmp") SetBuffer BackBuffer() While Not KeyHit(1)=1 Cls DrawImage img ,290,200,i If MilliSecs()>timer Then timer = MilliSecs()+10 If KeyDown(205) Then i=i+1 If i>frames-1 Then i=0 ElseIf KeyDown(203) Then i=i-1 If i<0 Then i=frames-1 EndIf EndIf Flip Wend End Function Rotate(grund,zeilen,spalten,Datei$="temp.bmp") size = ( ImageWidth(grund)^2 +ImageHeight(grund)^2 )^0.5 HandleImage(grund,ImageWidth(grund)/2 ,ImageHeight(grund)/2) neu2=CreateImage(size*spalten,size*zeilen) TFormFilter 0 SetBuffer ImageBuffer(neu2) For ty=0 To zeilen-1 For tx=0 To spalten-1 bild=CopyImage(grund) RotateImage bild,Float(tx+spalten*ty)*(360.0/(spalten*zeilen)) DrawImage bild,size/2+tx*size,(size/2)+size*ty FreeImage bild Next Next SaveBuffer (ImageBuffer(neu2),Datei$) Return (LoadAnimImage(Datei$,size,size,0,spalten*zeilen)) End Function Alternativ kannst du die bilder auch in ein Array tun oder was auch immer, muss man ja nicht unbedingt speichern... mfg |
||
SlasHeR |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi ich bins nochmal!
Danke für eure Hilfe und Feedback! Ist echt nen 1A Forum hier! Ich habe leider immernoch die Probleme gehabt, wie beschrieben. Kurios. Vielleicht lags daran, dass die Bilder im 64x64 großen buffer, selbst 64x64 groß waren, ich weis es nicht. :/ Hab mir daher was eigenes gebastelt, was zeitlich auch ausreicht. ![]() Falls jemand noch verwendung dafür haben sollte, hab ich mal die Funktion hier mit beigelegt. Code: [AUSKLAPPEN] Function RotateImageTile(sourceImage,destImage,winkel) ; simple rotate function for 64x64 tiles ; by SlasHeR LockBuffer ImageBuffer(sourceImage) LockBuffer ImageBuffer(destImage) If (winkel = 90) Then For y = 0 To 63 For x = 0 To 63 Pixel = ReadPixelFast( x,y,ImageBuffer(sourceImage)) WritePixelFast( 63-y, x, Pixel, ImageBuffer(destImage)) Next Next ElseIf (winkel = 180) Then For y = 0 To 63 For x = 0 To 63 Pixel = ReadPixelFast( x,y,ImageBuffer(sourceImage)) WritePixelFast( 63-x, 63-y, Pixel, ImageBuffer(destImage)) Next Next ElseIf (winkel = 270) Then For y = 0 To 63 For x = 0 To 63 Pixel = ReadPixelFast( x,y,ImageBuffer(sourceImage)) WritePixelFast( y, 63-x, Pixel, ImageBuffer(destImage)) Next Next End If UnlockBuffer ImageBuffer(sourceImage) UnlockBuffer ImageBuffer(destImage) If ((winkel = 0) Or (winkel = 360)) Then CopyRect 0,0, 64, 64, 0, 0, ImageBuffer(sourceImage), ImageBuffer(destImage) End If End Function |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group