पर मैं <canvas>
में एनीमेशन के साथ प्रयोग कर रहा हूं और कोण पर एक छवि को आकर्षित करने के तरीके से बाहर काम नहीं कर सकता। वांछित प्रभाव सामान्य रूप से खींची गई कुछ छवियां होती हैं, जिसमें एक छवि धीरे-धीरे घूमती है। (यह छवि स्क्रीन के केंद्र में नहीं है, अगर इससे कोई फर्क पड़ता है)।एचटीएमएल 5 कैनवास ड्रा इमेज
25
A
उत्तर
53
आपको उस छवि को चित्रित करने से पहले रूपांतरण मैट्रिक्स को संशोधित करने की आवश्यकता है जिसे आप घुमाएंगे।
HTMLImageElement ऑब्जेक्ट पर छवि बिंदु मानें।
var x = canvas.width/2;
var y = canvas.height/2;
var width = image.width;
var height = image.height;
context.translate(x, y);
context.rotate(angleInRadians);
context.drawImage(image, -width/2, -height/2, width, height);
context.rotate(-angleInRadians);
context.translate(-x, -y);
एक्स, वाई निर्देशांक कैनवास पर छवि का केंद्र है।
8
मैं एक समारोह (जेकब के जवाब के आधार पर) है कि उपयोगकर्ता एक एक्स में एक छवि पेंट करने के लिए अनुमति देता है लिखा है, एक कस्टम रोटेशन बिंदु में एक कस्टम रोटेशन के आधार पर Y स्थिति:
function rotateAndPaintImage (context, image, angleInRad , positionX, positionY, axisX, axisY) {
context.translate(positionX, positionY);
context.rotate(angleInRad);
context.drawImage(image, -axisX, -axisY);
context.rotate(-angleInRad);
context.translate(-positionX, -positionY);
}
तो फिर तुम फोन कर सकते हैं यह इस तरह है:
var TO_RADIANS = Math.PI/180;
ctx = document.getElementById("canvasDiv").getContext("2d");
var imgSprite = new Image();
imgSprite.src = "img/sprite.png";
// rotate 45º image "imgSprite", based on its rotation axis located at x=20,y=30 and draw it on context "ctx" of the canvas on coordinates x=200,y=100
rotateAndPaintImage (ctx, imgSprite, 45*TO_RADIANS, 200, 100, 20, 30);
2
यह दिलचस्प है कि पहले समाधान ने इतने सारे लोगों के लिए काम किया, यह मुझे आवश्यक परिणाम नहीं दिया। अंत मैं यह करने के लिए किया था में:
ctx.save();
ctx.translate(positionX, positionY);
ctx.rotate(angle);
ctx.translate(-x,-y);
ctx.drawImage(image,0,0);
ctx.restore();
जहां (positionX, positionY)
कैनवास मैं चाहता हूँ कि छवि पर स्थित होना करने के लिए और (x, y)
छवि जहां मैं छवि घुमाना चाहते पर है पर निर्देशांक है।
संबंधित मुद्दे
- 1. एचटीएमएल 5 कैनवास ड्रा इमेज अनुपात बग आईओएस
- 2. कैनवास ड्रा इमेज गुणवत्ता
- 3. एचटीएमएल 5 कैनवास
- 4. एचटीएमएल 5 कैनवास ड्रा रेक्ट - डिफ चौड़ाई का सीमा मिला?
- 5. एचटीएमएल 5 कैनवास उन्नत ढांचे
- 6. कैनवास ड्रा इमेज पहली बार छवियों को आकर्षित नहीं करता
- 7. एचटीएमएल 5 कैनवास
- 8. एचटीएमएल 5 कैनवास हिटस्टिंग
- 9. एचटीएमएल 5 कैनवास इरेज़र
- 10. एचटीएमएल 5 कैनवास
- 11. एचटीएमएल 5 कैनवास सीमाएं
- 12. एचटीएमएल 5 कैनवास
- 13. कैनवास/एचटीएमएल 5 रूपांतरण
- 14. एचटीएमएल 5 कैनवास
- 15. एचटीएमएल 5 कैनवास जावास्क्रिप्ट
- 16. एचटीएमएल 5 कैनवास
- 17. एचटीएमएल 5 कैनवास:
- 18. एचटीएमएल 5 कैनवास
- 19. एचटीएमएल 5 कैनवास
- 20. एचटीएमएल 5 कैनवास
- 21. एचटीएमएल 5 कैनवास तत्व
- 22. एचटीएमएल 5 कैनवास
- 23. एचटीएमएल 5 कैनवास
- 24. एचटीएमएल 5 कैनवास
- 25. एचटीएमएल 5 कैनवास
- 26. एचटीएमएल 5 कैनवास मास्क
- 27. एचटीएमएल 5 कैनवास
- 28. एचटीएमएल 5 कैनवास - पथ
- 29. एचटीएमएल 5 कैनवास
- 30. एचटीएमएल 5 कैनवास
अंत में घूर्णन/अनुवाद करने के बजाय, आप परिवर्तन और ड्राइंग करने से पहले और बाद में 'context.save() 'और' context.restore() 'कर सकते हैं। –
सहेजने()/पुनर्स्थापन() का उपयोग करते समय क्लीनर प्रतीत हो सकता है, यह अधिक अक्षम होगा। इंजन को सभी संदर्भ गुणों को स्टोर/पुनर्स्थापित करना होगा, न केवल उन लोगों को जिन्हें हम यहां जोड़ रहे हैं। यह एक संवेदनशील कोड पथ में मायने रखता है। –
एक और उदाहरण के लिए, यह (डुप्लिकेट) प्रश्न और उत्तर देखें: [एचटीएमएल 5 कैनवास का उपयोग करके गेज का डायल करें - घुमावदार बिंदु के बारे में घुमाएं] (http://stackoverflow.com/questions/4649836/dial-of-a-gauge-using -html5-कैनवास घुमाने-के बारे में मनमाना सूत्री/4,650,102 # 4,650,102)। – Phrogz