কম্পিউটার টিউটোরিয়াল

HTML5 Canvas-এ save() এবং restore() মেথড কী?


Canvas স্টেট ম্যানেজমেন্ট: save() ও restore()

HTML5 Canvas دوটি গুরুত্বপূর্ণ মেথড প্রদান করে ক্যানভাসের স্টেট সংরক্ষণ ও পুনরুদ্ধারের জন্য: save() এবং restore()। ক্যানভাসের সেটিংস (ট্রান্সফরমেশন, স্টাইল, ক্লিপিং রিজন ইত্যাদি) একটি স্টকে (stack) সংরক্ষিত হয়।

ক্রমিক নং মেথড ও বর্ণনা
১ save()
বর্তমান ক্যানভাস স্টেটকে স্টকে পুশ (push) করে। এর মধ্যে অন্তর্ভুক্ত থাকে: ট্রান্সফরমেশন ম্যাট্রিক্স, ক্লিপিং রিজন, এবং সমস্ত ড্রইং স্টাইল (fillStyle, strokeStyle, lineWidth, font, textAlign ইত্যাদি)।
২ restore()
স্টকের 탑-most স্টেটটি পপ (pop) করে এবং ক্যানভাস কনটেক্সটকে সেই স্টেটে ফেরত আনে। যদি স্টক খালি হয়, তবে এই মেথড কিছুই করে না।

ব্যবহারের উদাহরণ

<!DOCTYPE html>
<html>
<head>
  <style>
    #test { width: 300px; height: 300px; margin: 20px auto; border: 1px solid #ccc; }
  </style>
  <script>
    function drawShape() {
      const canvas = document.getElementById('mycanvas');
      if (canvas.getContext) {
        const ctx = canvas.getContext('2d');
        
        // ডিফল্ট সেটিংসে আয়ত আঁকুন
        ctx.fillRect(0, 0, 150, 150);
        
        // ডিফল্ট স্টেট সংরক্ষণ
        ctx.save();
        
        // সেটিংস পরিবর্তন
        ctx.fillStyle = '#66FFFF';
        ctx.fillRect(15, 15, 120, 120);
        
        // বর্তমান স্টেট সংরক্ষণ
        ctx.save();
        
        // নতুন সেটিংস
        ctx.fillStyle = '#993333';
        ctx.globalAlpha = 0.5;
        ctx.fillRect(30, 30, 90, 90);
        
        // পূর্বের স্টেট ফেরত (লাল আয়তের স্টেট)
        ctx.restore();
        ctx.fillRect(45, 45, 60, 60);
        
        // মূল স্টেট ফেরত (নীল আয়তের স্টেট)
        ctx.restore();
        ctx.fillRect(40, 40, 90, 90);
      } else {
        alert('Canvas সাপোর্ট করে না। আধুনিক ব্রাউজার ব্যবহার করুন।');
      }
    }
  </script>
</head>
<body id="test" onload="drawShape();">
  <canvas id="mycanvas" width="300" height="300"></canvas>
</body>
</html>

কেন save()/restore() ব্যবহার করবেন?

  • কমপ্লেক্স ড্রইং-এ স্টেট ম্যানেজমেন্ট সহজ করে।
  • নেস্টেড ট্রান্সফরমেশন (translate, rotate, scale) হ্যান্ডল করতে সাহায্য করে।
  • কোড পঠনীয় এবং রক্ষণাবেক্ষণযোগ্য করে তোলে।
  • পারফরম্যান্সে স 익숙া নাও হতে পারে, কিন্তু কোড ক্লিয়ার রাখতে অপরিহার্য।

নোট: প্রতিটি save()-এর জন্য একটি restore() থাকা উচিত, অন্যথায় স্টক ওভারফ্লো হতে পারে।

  1. HTML5-এ ক্যানভাসের জন্য ফ্রি লাইব্রেরিগুলো

  2. PHP-তে গেটার (Getter) ও সেটার (Setter) মেথড কী?

  3. C#-এ Thread ক্লাসের মেথড এবং প্রোপার্টিগুলো

  4. C#-এ ক্লাস মেথড (Class Methods) এবং ক্লাস মেম্বার (Class Members) এর পার্থক্য