2014-06-26 5 views
7

कैसे पैमाने (1.5, 1.5) काम नहीं कर के साथ putImageData पैमाने को बदलने के लिए बदलने के तरीकेएचटीएमएल 5 कैनवास .. putImageData पैमाने

var imageData = context.getImageData(0, 0, canvas.width, canvas.height); 
context.clearRect(0, 0, canvas.width, canvas.height); 
context.scale(1.5, 1.5); 
context.putImageData(imageData, 0, 0); 

उत्तर

10

सही है, अपने कोड मौजूदा चित्र स्केल नहीं करेगा।

context.scale केवल नया चित्र, नहीं मौजूदा चित्र को प्रभावित करता है।

context.putImageData सहेजे गए मूल पिक्सल को कैनवास पर वापस रखेगा, लेकिन इमेजडेटा ड्रॉइंग कमांड नहीं है, इसलिए इसके परिणाम स्केल नहीं किए जाएंगे।

मौजूदा पिक्सल को स्केल करने के लिए आपको पिक्सल को अपने कैनवास के बाहर किसी इकाई में सहेजना होगा। बाहरी इकाई एक नया छवि तत्व या दूसरा कैनवास तत्व हो सकता है।

उदाहरण कोड और एक डेमो: http://jsfiddle.net/m1erickson/p5nEE/

// canvas related variables 
var canvas=document.getElementById("canvas"); 
var context=canvas.getContext("2d"); 

// draw a test square 
context.fillStyle="red"; 
context.fillRect(0,0,50,50); 

// create an image from the canvas 
// clear & scale the canvas 
// draw the image to the canvas 
var imageObject=new Image(); 
imageObject.onload=function(){ 

    context.clearRect(0,0,canvas.width,canvas.height); 
    context.scale(1.2,1.2); 
    context.drawImage(imageObject,0,0); 

} 
imageObject.src=canvas.toDataURL(); 
+0

मैं इस मामले के साथ एक ही समस्या है: दूसरे कैनवास जब दूसरी कैनवास से नई छवि बनाने के लिए, कुछ पिक्सेल में अल्फा = 0 है। अल्फा चला गया है, इसलिए यह पिक्सेल के लिए अल्फा = 0 के साथ काला हो गया है; इसे कैसे हल करें? – billyzaelani

+0

प्रतीक्षा करें, तर्क 6 और 7 को रखने के लिए इमेज का उपयोग छवि को स्केल करने के लिए नहीं किया जा सकता है? यदि नहीं, तो मुझे समझ में नहीं आता कि [दस्तावेज़ीकरण] (https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/putImageData) कह रहा है कि वे वास्तव में करते हैं। – Michael

+0

@ माइकल आप भ्रमित हो सकते हैं 'ctx.drawImage()' जिसका अंतिम 2 तर्क वास्तव में परिणाम को स्केल करते हैं। जिस तरह से यह जवाब फ्रेम करता है, यह एक अच्छा मानसिक मॉडल है: ड्रॉ इमेज जैसे आदेश खींचें पैमाने का सम्मान करेंगे, आदेशों को नहीं रखेंगे। –

संबंधित मुद्दे