27.06.16 02:24
Canvas çizimlerinde tuval durumunu saklama ve geri yükleme
Çizim yaparken değiştirdiğimiz özellikleri daha sonra yeniden kullanabilmek için, çizim sırasında bu özellik değerlerini tekrar eski haline getirmek gerekir ve bu da bazen çokca kod yazmamızı gerektirir. Örneğin bir metin görüntülerken lineStyle , fillStyle , textAlign ve font özelliklerini değiştirdiğimizi düşünelim. Metni yazdırdıktan sonra tekrar eski lineStyle , fillStyle , textAlign ve font özelliklerine dönmek için bu özellikleri tek tek eski değerleriyle yeniden değiştirmek gerekir. Bu da bir miktar kodlama gerektirir, bazen uzun olabilir ve hata yapmaya müsait bir durumdur. save ve restore yöntemleri bu işlem için kısa bir yol sunar. save yöntemi tuvalin aşağıda tamamı listelenen fillStyle , strokeStyle , lineWidh , lineCap , font gibi özellik değeri ve durumlarını saklar. restore yöntemi ise save ile saklanan tüm değerleri save yöntemini çağırmadan önceki haline getirir. Dolayısıyla save ile tuvalin durumunu değiştirmeden önce saklarsak daha sonra restore ile kolaylıkla saklanan duruma geri dönebiliriz. Örnek: <canvas id="cnTuval" width="200" height="200" style="border:solid 1px red">
Tarayıcınız HTML5 desteklemiyor.
</canvas><br />
<input type="button" value="Çiz" onclick="ciz()" />
<script>
function ciz() {
var tuval = document.getElementById("cnTuval");
var ctx = tuval.getContext("2d");
// Tuvalin şu anki durumunu sakla.
ctx.save();
// Bu ayarlardan önceki durumda strokeStyle değeri,
// düz siyah renk, lineWidth değeri ise 1 pikseldir.
ctx.strokeStyle = "blue"; // Çizgi stili düz mavi renk.
ctx.lineWidth = 5; // Çizgi kalınlığı 5 piksel.
ctx.strokeRect(10, 10, 50, 50);
// Tuvalin durumunu üstteki save yöntemini çağırmadan önceki
// duruma (lineWidth = 1, strokeStyle = "black") getir.
ctx.restore();
// Tuvalin son durumuyla bir dörtgen çiz.
ctx.strokeRect(100, 10, 50, 50);
}
</script>
Çıktısı şöyledir: save yöntemi restore çağırılmadan arka arkaya çağırılabilir. Böyle bir durumda her bir restore, bir önceki save ile saklanan duruma dönecektir. Örnek: <canvas id="cnTuval" width="200" height="200" style="border:solid 1px red">
Tarayıcınız HTML5 desteklemiyor.
</canvas><br />
<input type="button" value="Çiz" onclick="ciz()" />
<script>
function ciz() {
var tuval = document.getElementById("cnTuval");
var ctx = tuval.getContext("2d");
ctx.fillStyle = "gray";
ctx.font = "20px Arial";
ctx.fillText("Bir", 0, 20);
// Tuvalin şu anki durumunu (ilk değerleri) sakla.
// (fillStyle = "gray", font = "20px Arial" durumu)
ctx.save();
// font özelliğinin değerini değiştir
ctx.font = "italic 30px Times";
// Çizgi rengini değiştir
ctx.fillStyle = "blue";
// Yeni değerlerle bir metin görüntüle.
ctx.fillText("İki", 0, 60);
// Tuvalin şu anki durumunu sakla
// (fillStyle = "blue", font = "italic 30px Times" durumu)
ctx.save();
// fillStyle özelliğini değiştir.
ctx.fillStyle = "green";
// Yeni değerlerle bir metin görüntüle.
ctx.fillText("Üç", 0, 100);
// Bir önceki duruma geri dön
// (fillStyle = "blue", font = "italic 30px Times" durumu)
ctx.restore();
// Yeni değerlerle bir metin görüntüle.
ctx.fillText("Dört", 0, 140);
// Bir önceki duruma (ilk save'den önceki duruma) geri dön.
// (fillStyle = "gray", font = "20px Arial" durumu)
ctx.restore();
// Son değerlerle bir metin görüntüle.
ctx.fillText("Beş", 0, 180);
}
</script>
Çıktısı şöyle olacaktır: Görüleceği gibi "Bir" metni ilk durumda, "İki" metni ikinci durumda, "Üç" metni üçüncü durumda çizilmiştir. "Dört" metni yazıldığında ise ikinci duruma, "Beş" metni yazıldığında ise birinci / ilk duruma dönülmüştür. save yöntemi şunları saklar: strokeStyle , fillStyle , globalAlpha , lineWidth , lineCap , lineJoin , miterLimit , shadowOffsetX , shadowOffsetY , shadowBlur , shadowColor , globalCompositeOperation , font , textAlign , textBaseline özellik
değerleri ile daha sonraki makalelerde açıklanacak dönüştürme / biçim
değiştirme ve kırpma alanı değerleri. İlgili Makaleler HTML5 ve Flash üzerine HTML5 Canvas etiketi ile çizim Canvas etiketine düz çizgilerle çizim yapmak Canvas ile dörtgenler çizmek Canvas ile daire, çember, yay ve dilimler çizmek Canvas ile eğriler çizmek Canvas ile metin görüntüleme Canvas çizgi uçları ve çizgi birleşimleri Canvas çizimlerinde tuval durumunu saklama ve geri yükleme (Bu makale) Canvas ile gölge efekti oluşturma Canvas ile tuval üzerine resim çizmek Canvas ile degrade / gradient (geçişli renk) dokuları oluşturma Canvas ile dönüşüm işlemleri 1: Tuvali kaydırma ve döndürme Canvas ile dönüşüm işlemleri 2: Ölçekleme Canvas ile dönüşüm işlemleri 3: Transform ile Dönüşüm Canvas ile resim dokusu oluşturma Canvas Clip Yöntemiyle Maskeleme Canvas globalAlpha Özelliği Canvas globalCompositeOperation Özelliği Canvas İle Piksel İşlemleri
Ekleyen: canora
Değiştiren: canora
23.04.16 02:41
Canvas çizimlerinde tuval durumunu saklama ve geri yükleme
Çizim yaparken değiştirdiğimiz özellikleri daha sonra yeniden kullanabilmek için, çizim sırasında bu özellik değerlerini tekrar eski haline getirmek gerekir ve bu da bazen çokca kod yazmamızı gerektirir. Örneğin bir metin görüntülerken lineStyle , fillStyle , textAlign ve font özelliklerini değiştirdiğimizi düşünelim. Metni yazdırdıktan sonra tekrar eski lineStyle , fillStyle , textAlign ve font özelliklerine dönmek için bu özellikleri tek tek eski değerleriyle yeniden değiştirmek gerekir. Bu da bir miktar kodlama gerektirir, bazen uzun olabilir ve hata yapmaya müsait bir durumdur. save ve restore yöntemleri bu işlem için kısa bir yol sunar. save yöntemi tuvalin aşağıda tamamı listelenen fillStyle , strokeStyle , lineWidh , lineCap , font gibi özellik değeri ve durumlarını saklar. restore yöntemi ise save ile saklanan tüm değerleri save yöntemini çağırmadan önceki haline getirir. Dolayısıyla save ile tuvalin durumunu değiştirmeden önce saklarsak daha sonra restore ile kolaylıkla saklanan duruma geri dönebiliriz. Örnek: <canvas id="cnTuval" width="200" height="200" style="border:solid 1px red"> Tarayıcınız HTML5 desteklemiyor. </canvas><br /> <input type="button" value="Çiz" onclick="ciz()" /> <script> function ciz() { var tuval = document.getElementById("cnTuval"); var ctx = tuval.getContext("2d"); // Tuvalin şu anki durumunu sakla. ctx.save(); // Bu ayarlardan önceki durumda strokeStyle değeri, // düz siyah renk, lineWidth değeri ise 1 pikseldir. ctx.strokeStyle = "blue"; // Çizgi stili düz mavi renk. ctx.lineWidth = 5; // Çizgi kalınlığı 5 piksel. ctx.strokeRect(10, 10, 50, 50); // Tuvalin durumunu üstteki save yöntemini çağırmadan önceki // duruma (lineWidth = 1, strokeStyle = "black") getir. ctx.restore(); // Tuvalin son durumuyla bir dörtgen çiz. ctx.strokeRect(100, 10, 50, 50); } </script> Çıktısı şöyledir: save yöntemi restore çağırılmadan arka arkaya çağırılabilir. Böyle bir durumda her bir restore, bir önceki save ile saklanan duruma dönecektir. Örnek: <canvas id="cnTuval" width="200" height="200" style="border:solid 1px red"> Tarayıcınız HTML5 desteklemiyor. </canvas><br /> <input type="button" value="Çiz" onclick="ciz()" /> <script> function ciz() { var tuval = document.getElementById("cnTuval"); var ctx = tuval.getContext("2d"); ctx.fillStyle = "gray"; ctx.font = "20px Arial"; ctx.fillText("Bir", 0, 20); // Tuvalin şu anki durumunu (ilk değerleri) sakla. // (fillStyle = "gray", font = "20px Arial" durumu) ctx.save(); // font özelliğinin değerini değiştir ctx.font = "italic 30px Times"; // Çizgi rengini değiştir ctx.fillStyle = "blue"; // Yeni değerlerle bir metin görüntüle. ctx.fillText("İki", 0, 60); // Tuvalin şu anki durumunu sakla // (fillStyle = "blue", font = "italic 30px Times" durumu) ctx.save(); // fillStyle özelliğini değiştir. ctx.fillStyle = "green"; // Yeni değerlerle bir metin görüntüle. ctx.fillText("Üç", 0, 100); // Bir önceki duruma geri dön // (fillStyle = "blue", font = "italic 30px Times" durumu) ctx.restore(); // Yeni değerlerle bir metin görüntüle. ctx.fillText("Dört", 0, 140); // Bir önceki duruma (ilk save'den önceki duruma) geri dön. // (fillStyle = "gray", font = "20px Arial" durumu) ctx.restore(); // Son değerlerle bir metin görüntüle. ctx.fillText("Beş", 0, 180); } </script> Çıktısı şöyle olacaktır: Görüleceği gibi "Bir" metni ilk durumda, "İki" metni ikinci durumda, "Üç" metni üçüncü durumda çizilmiştir. "Dört" metni yazıldığında ise ikinci duruma, "Beş" metni yazıldığında ise birinci / ilk duruma dönülmüştür. save yöntemi şunları saklar: strokeStyle , fillStyle , globalAlpha , lineWidth , lineCap , lineJoin , miterLimit , shadowOffsetX , shadowOffsetY , shadowBlur , shadowColor , globalCompositeOperation , font , textAlign , textBaseline özellik
değerleri ile daha sonraki makalelerde açıklanacak dönüştürme / biçim
değiştirme ve kırpma alanı değerleri. Canvas üzerine çizim ile ilgili diğer makaleler için tıklayın.
Ekleyen: canora