Bild um x° drehen

Sorry, ich muß meine Aussage da leicht revidieren: Opera 9.6 wirft die Meldung überhaupt nicht aus, rendert aber auch nicht das Grafikelement in den <canvas>-Tag - zumindest seh ich da nichts, die Fehlerkonsole hat aber auch nichts zu beanstanden.

mfg Maik
 
In dieser Scriptzeile wird der Pfad zur Grafikdatei gesetzt:

Code:
    objImg.src = "bild.jpg";  // Breite: 120 px, Höhe: 120px


mfg Maik
 
Hi,

verdammt, ich hatte das irgendwie falsch verstanden... Ok super, bei mir klappt es (ich dachte der Rahmen sollte sich drehen...)
Ich bin begeister!
Nur wie kann ich die mehrfach Darstellung vermeiden? :)
 
Hi,

mit der Methode clearRect des Kontext-Objekts lässt sich der canvas-Bereich löschen.

Schau dir mal das Beispiel hier an - beim Betätigen des linken Buttons wird dort das Bild ohne Drehung gezeichnet, die rechte Schaltfläche dreht es um 120°.

Ciao
Quaese
 
Hi,

ich weiss nicht, ob ich dich richtig verstanden habe.

Du kannst doch die Funktion zum Drehen dahingehend abändern, dass sie neben dem Drehwinkel eine Bildquelle entgegennimmt. Handelt es sich beim aktuellen Bildobjekt nicht um das gewünschte, wird es erstellt und die Funktion erneut aufgerufen.

Beispiel
Code:
function rotateIt(lngPhi, strImg){
  // Falls das Bildobjekt nicht existiert ODER ein anderes Bild angezeigt werden soll
  // => Bild neu generieren und Funktion erneut aufrufen
  if((typeof objImg=="undefined") || (objImg.src.search(new RegExp(strImg))==-1)){
    objImg = new Image();
    objImg.onload = function(){
      rotateIt(lngPhi, strImg);
    }
    objImg.src = strImg;

    return;
  }

  clearIt();                                // Canvas leeren
  objContext.save();                        // Kontext "speichern"
  objContext.translate(120, 120);           // Ursprung verschieben
  objContext.rotate((lngPhi*Math.PI/180));  // Context drehen
  objContext.drawImage(objImg, -75, -60);   // Bild zentriert zeichnen
  objContext.restore();                     // Kontext wiederherstellen
}

Ciao
Quaese
 
Hi,

ich weiß nicht ob ich dich richtig verstehe. Ich möchte die Funktion gerne so umschreiben, das man damit z.b. das Bild eines Autoreifens (oder so) zum Drehen bekommt.
Mein jetztiger Versuch scheitert an der "Bewegung" an sich, das heißt, es hat sich vorher einmal gedreht, hat aber die alten Bilder dagelassen. Jetzt bin ich soweit, das es sich einmal dreht, und dann ist schluss:
Javascript:
function rotateIt(lngPhi, strImg){
  if( (typeof objImg=="undefined") || (objImg.src.search(new RegExp(strImg))==-1) ){
    objImg = new Image();
    objImg.onload = function(){
      rotateIt(lngPhi, strImg);
    }
    objImg.src = strImg;

    return;
  }

  clearIt();                                // Canvas leeren
  objContext.save();                        // Kontext "speichern"
  objContext.translate(6, 6);           // Ursprung verschieben
  objContext.rotate((lngPhi*Math.PI/180));  // Context drehen
  objContext.drawImage(objImg, 50, 50);   // Bild zentriert zeichnen
  objContext.restore();                     // Kontext wiederherstellen
}

function clearIt(){
        objContext.clearRect(0, 0, 240, 240);
}
setInterval("rotateIt(6, 'bild.jpg')", 1500);
 
Zurück